Map中如何實現key唯一不重複

2021-07-30 17:34:41 字數 756 閱讀 9724

map中如何實現key唯一不重複

問題:如何做到map中key唯一不重複,每次都遍歷來equals比較嗎?

首先,答案是否。如果全部遍歷的話,當map中元素很多的時候,顯然查詢效率低。

解釋:hashmap屬於雜湊儲存結構,其table的儲存是放在不同的jvm記憶體區域。通過乙個整型值來標識table的區域,相當於這個區域的下標。然後整個查詢過程就從不再需要遍歷整個table,只需遍歷這一區域的資料即可。

結合hashmap.class中的put方法來說明:

如何找到這個區域呢?

1.首先將傳入的key值用hash方法轉化為int型的hash值,並且通過該方法讓hash值變得各位更均勻一些。變得更均勻的目的是讓每乙個區域的大小更加等分些,公平利用儲存空間,查詢速度得到提公升。

2.而後的indexfor方法將根據其hash值和table的大小得到這個區域的「位置下標」。具體其方法的實現同樣也是為了讓各個區域分布的更加均勻。(具體為什麼這樣的方法是最好的參考

中闡述為什麼不是取模而是

return h & (length-1);)

得到這個區域以後,再遍歷這個區域來找到對應的元素

1.通過for迴圈遍歷這個區域的鍊錶,在迴圈中如果key值的hash值相等,並且其key值相等,那麼進行覆蓋原元素操作。

2.如果遍歷結束依然沒找到,則新添元素

在Map中實現key唯一不重複操作

目錄 首先,答案是否。如果全部遍歷的話,當map中元素很多的時候,顯然查詢效率低。解釋 hashmap屬於雜湊儲存結構,其table的儲存是放在不同的jvm記憶體區域。通過乙個整型值來標識table的區域,相當於這個區域的下標。然後整個查詢過程就從不再需要遍歷整個table,只需遍歷這一區域的資料即...

根據map的key唯一實現需求

最近在做乙個以天為列的列表展示,但是通過介面拿過來的資料時間並不是連續規律的,而前端賦值是依據陣列下標賦值,所以我後台根據map的key值重複覆蓋的方式進行邏輯處理。已知列為31天,將它 01,02,03.作為key值,並儲存對應的value值,在進行巢狀迴圈時已知key就31個,迴圈時進行判斷如果...

Dictionary的key如何確定唯一的

之前看過其他關於dictionary的key如何保證唯一的文章,大多的意思是根據記憶體的位址來確定,有一次的專案中,我以自定義的attribute作為key來儲存時發現,具有不同值的attribute作為key插入到dictionary時覆蓋了其他的物件。經過debug,發現,被覆蓋的物件有乙個特性...