2017-08-01 176 views
-6

在Java中,Array和HashMap被用作集合。但是我無法理解在哪種情況下我們應該使用Array以及何時使用HashMap。 他們倆之間的主要區別是什麼? 我對數組和HashMap之間的區別感到困惑。java中的Array和Hashmap之間的主要區別是什麼?

任何人都可以解釋這一點嗎?

+1

@ScaryWombat這個問題似乎是關於'HashMap'與數組,而不是'ArrayList',所以這不是真正的重複。 – Andreas

+0

@Andreas對不起,我感到困惑 –

+0

OP - 你的意思是一個像'String [] myArr'這樣的數組嗎? –

回答

0
  • Array具有值,HashMap具有鍵和值。而您可以通過類似array[1]的值訪問某個值,但您無法通過HashMap來完成此操作。您必須致電hashmap.get(key)以檢索所需的值(這意味着您需要一個密鑰才能直接訪問關聯的值)。
  • HashMaps不能有重複鍵。因此,如果您有鍵和值的HashMap,則可以確定它的鍵是唯一的(值可能包含鍵值對中的重複項)。
  • 數組將維持您的訂單,您可以對它們進行排序。 HashMap不保證使用什麼訂單。它也不保證訂單會隨着時間的推移保持不變。所以如果你正在尋找它,你可能會更好LinkedHashMap
  • 雖然有必要知道從HashMap中檢索值的密鑰,但您也有一個contains(key)方法,該方法是具有正確實施的散列的O(1)。它允許您檢查地圖中是否存在關鍵字。如果您存儲關聯的數據並且想要檢查您是否已經擁有了所需的關鍵字,則這非常有用。

它們之間有什麼共同之處在於get和put操作都是(在理想情況下)O(1)。

信息的另一個小竅門:如果我沒有弄錯,HashMap s利用陣列(和LinkedList s)在下面。這是一個非常有用的數據結構,並且非常巧妙。

在想要將兩段數據相互關聯的情況下,您希望使用HashMaps。說,你有一個Restaurant和一個Address。你可以使用Restaurant作爲鍵,Address作爲一個值(不是最好的例子,但你明白了)。至於陣列,如果你有一個你最喜歡的餐館的列表,數組可能是一個很好的選擇,以保持他們。

0

假設你完全清楚的是一個HashMap處理鍵值對,而數組沒有事實..

一個HashMap使用鍵的hashCode在什麼索引值存儲在一個決定array。當你給HashMap一個鍵值以獲取相關值時,它將首先計算key.hashcode()& m,其中m是底層數組的長度,然後檢查存儲在該位置的內容。

HashMap的一個實現可能會在每個數組點處存儲鏈接列表。如果是這種情況,HashMap現在將遍歷列表並返回一個值v,如果相關的密鑰和您提供的密鑰相同(由等於()方法確定)。

需要在每個數組池中存儲Linkedlist出現於使用%。散列碼可能非常大,大於數組的大小。這意味着幾個不同的鍵最終可能會生成相同的索引。

一個很大的區別是時間複雜性。在最壞的情況下,HashMap中的查找將花費O(n)次。如果HashCode執行得不好並且所有項目都以相同的HashCode結束,就會發生這種情況。然而,在一個數組中,查找總是時間爲O(1)。

我希望這可以讓你更清楚一些。

+0

一般理論上的答案不夠清晰。如果由一些代碼片段支持,答案會有更多的權重年齡。 –

+0

@ShyamBaitmangalkar你期望什麼,我發佈了一個HashMap的完整實現? –

+0

當然不是。如果你可以添加一些代碼片段來證明'Arrays'和'HashMap'的行爲,那麼答案會很好。這只是一個建議,通常適用於本論壇發佈的大部分答案。 –

相關問題