2016-01-06 55 views
1

在一些文章中,我讀:根據loadfactor如何元件在ConcurrentHashMap的基礎上客座率分組

  1. 這個分組情況如何通過接近

    ConcurrentHashMap的組中的元素?

  2. 比方說我重寫hashCode()功能,使其始終返回1.現在如何去實現插入1個的ConcurrentHashMap的loadfactor更高值?

  3. 現在我覆蓋hashCode()函數,以便它總是返回不同的哈希碼。現在如何更高更低loadfactor的值將影響插入到ConcurrentHashMap?中。

回答

0

散列表本質上是一個列表數組。例如,假設一個給定的hashmap有一個100個列表的數組。當你給它添加一些東西時,hashCode就是爲該對象計算的。然後,該值的模數和列表數(在本例中爲100)用於確定將其添加到哪個列表。所以如果你添加一個哈希碼爲13的對象,它會被添加到列表13中。如果你添加一個哈希碼爲12303512的對象,它會被添加到列表12中。

負載因子告訴哈希映射何時增加名單。它基於整個地圖中的項目數量和當前容量。

在第一種情況下,hashcode始終返回1,不管有多少個列表,您的對象最終都會在同一個列表中(這很糟糕)。在第二種情況下,它們將在整個列表(這很好)。

由於加載因子是基於地圖的整體大小而不是列表的大小,因此hashcode的質量並不真正與loadfactor交互。在第一種情況下,它會像第二種情況一樣增長,但無論如何,所有內容仍然會以相同的列表結束。

+0

[負載因子主要與散列函數的質量有關。](http://stackoverflow.com/a/1573991/1371329) – jaco0646

+0

如果hashcode負責分配,那麼當loadfactor進入圖片時以及它如何影響分佈接近於0或1 – quintin

+0

正如我已經解釋的,如果所有對象都具有相同的哈希碼,則加載因子無關緊要。在地圖上的查找退化爲未排序列表中的搜索性能。 – JimmyJames