2012-11-19 61 views
0

從我明白包含HashMap的,內部數據結構可以被看作是一個二維數組。第一個索引是「key」,第二個索引是包含散列到同一個鍵的值的數組。在我看來,你需要初始化一個足夠大的數組來計算未來的條目(否則你需要在某個點放大數組或者所有值散列爲相同的值)。由於初始化一定大小的數組的初始成本,這意味着hashmaps相對於鏈表具有較高的初始成本。根據需要代表項目的X個HashMap是否需要比鏈表更多的內存?

的LinkedList只需要儘可能多的內存。我在這個假設中糾正了嗎?我只是很困惑,因爲很多人說LinkedList使用更多的內存。

回答

0

你忘記了,地圖具有鍵和值。因此,對於列表中的每個項目,地圖中都有2個項目。因此,如果LinkedList在存儲方面的成本爲n,則該地圖將需要2n。除此之外,正如你所指出的那樣,你必須有一些自由空間,所以現在你可以達到2n + 2n * .c,這是(1 + c)2n,其中c是一些像.25的分數。

那麼與鏈表相比,這是否符合「高」空間要求?我不這麼認爲,除非你有限制的內存要求。請記住,您還可以持續訪問任何元素,其中鏈接列表的O(n)用於訪問。最後,因爲Maps處理具有鍵和值的問題,列表主要關注值,所以應用這些數據結構的問題往往不同,所以這個問題可能沒有多大意義。

0

只是一些數字:

的空HashMap需要128個字節: 的開銷是64個字節加上每條目36個字節。 對於10K條目,預計開銷爲〜360K

空LinkedList需要48個字節:開銷是24個字節,每個條目加24個字節。 對於10K條目,預期開銷是〜240K

源:http://www.ibm.com/developerworks/java/library/j-codetoheap/

Image from google search

相關問題