簡體   English   中英

使用hashCode為HashMap返回巨大的Integer id

[英]using hashCode to return huge Integer ids for HashMap

HashMap在內部使用固定長度數組,並且存儲值的索引基於key哈希值,如果是哈希沖突,它將在該索引上創建一個鏈表,然后使用equals方法返回正確的值讀。

我有一個自定義類,它有一個Integer id作為序列號,我用這個類作為HashSet的'key' ,在hasCode()方法中我返回id,這意味着HashSet的底層數組將尋找我從hasCode()返回的索引號N來存儲該值。

現在,即使我從hashCode()返回Integer.MAX_VALUE - 1HashMap也能夠將值存儲在地圖中。 問題是, Integer.MAX_VALUE -1是否被用作底層數組的索引? 如果是,在我們創建實例時, HashMap創建那么龐大的數組?

不,事實並非如此。 Hashmap最初會分配一個包含16個元素的數組,然后根據加載因子調整大小。 因此,在哈希碼返回一個不適合該數組甚至是負數的整數的情況下,有一個簡單的機制可以像mod的絕對值一樣使用。 以簡化形式:

 int arrayIndex = abs(hashCode) % arraySize; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM