如標題所問,答案是不可以!
為什麼不可以?
1.HashMap是基於哈希表的Map接口實現。此實現提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恆久不變。
2.HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。
3.HashMap存數據流程:
a.調用put(key,value)時,首先獲取key的hashcode,int hash = key.hashCode();
b.hash通過一下運算得到一個int h. 做到儘量均勻分佈。
hash ^= (hash >>> 20) ^ (hash >>> 12);
int h = hash ^ (hash >>> 7) ^ (hash >>> 4);
c.得到h之後,把h與HashMap的承載量(HashMap的默認承載量length是16,可以自動變長)進行邏輯與運算,即 h & (length-1),
得到的結果就是index。也就是索引將要插入的值在數組中的位置。還有一點需要說明,HashMap的鍵可以為null,它的值是放在數組的第一個位置。
d.用table[index]表示已經找到的元素需要存儲的位置。先判斷該位置上有沒有元素,沒有的話就創建一個Entity
小結:面試中經常會被問到,知表知理才能掌握的牢固。HashMap的key是通過hashCode計算的唯一標識,但是value是可以重複的。如果非得抬槓重寫hashcode就另一回事了。
閱讀更多 每日編程 的文章