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

2022-09-26 10:24:22 字數 1003 閱讀 7429

目錄

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

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

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

如何找到這個區域呢?

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

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

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

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

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

因為map本身是不可以放相同的key的,但是如果我們想,也是有辦法的。

另外j**a也給我們提供了乙個鑽空子的方法,這就是jdk1.8的identityhashmap,也是map的乙個實現類

hashmap比較key的值是用equals來比較的,所以只要key的值一樣,就會被認為是同乙個key。而identityhashmap是用==來比較key的存放位址,所以,只要我們重新new出來乙個物件,就可以把值相同的key定義為值相等但位址不相同的key,這樣就不會被認為是同乙個key

public class maptest

}輸出結果是:

另外hashmap還可以自己重寫hashcode和put來實現hashcode的值不一樣,從而不會被認為是同乙個key,繼續研究。。

本文標題: 在map中實現key唯一不重複操作

本文位址: /ruanjian/j**a/419556.html

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

map中如何實現key唯一不重複 問題 如何做到map中key唯一不重複,每次都遍歷來equals比較嗎?首先,答案是否。如果全部遍歷的話,當map中元素很多的時候,顯然查詢效率低。解釋 hashmap屬於雜湊儲存結構,其table的儲存是放在不同的jvm記憶體區域。通過乙個整型值來標識table的...

根據map的key唯一實現需求

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

JMeter實現唯一引數生成不重複時間戳

使用jmeter做介面壓測時,總會遇到壓測時,提示不允許重複id或提示訂單不允許重複現象,那麼如何解決呢?1 通過函式助手,生成乙個 time 函式 2 如果引數為時間戳,那公式為 預設該公式精確到毫秒級別,13位數 該公式精確到秒級別,10位數 3 如果引數需要為當前日期,那公式為 採用時間戳 日...