91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Map中如何實現key唯一不重復操作

發布時間:2021-08-30 09:34:16 來源:億速云 閱讀:311 作者:小新 欄目:開發技術

這篇文章主要介紹了在Map中如何實現key唯一不重復操作,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

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

解釋: HashMap屬于散列存儲結構,其table的存儲是放在不同的Jvm內存區域。通過一個整型值來標識table的區域,相當于這個區域的下標。然后整個查找過程就從不再需要遍歷整個table,只需遍歷這一區域的數據即可。

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

在Map中如何實現key唯一不重復操作

如何找到這個區域呢?

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

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

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

1.通過for循環遍歷這個區域的鏈表,在循環中如果key值的hash值相等,并且其key值相等,那么進行覆蓋原元素操作。

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

Map放入相同的key值

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

另外java也給我們提供了一個鉆空子的方法,這就是JDK1.8的IdentityHashMap,也是Map的一個實現類

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

public class MapTest { 
 public static void main(String[] args) {
  Map map = new IdentityHashMap();  
  map.put(new Integer(1), "tom");
  map.put(new Integer(1), "ben");
  map.put(new Integer(1), "cat");
  map.put(new Integer(1), "dog");  
  System.out.println(map);
 }
}

輸出結果是:

{1=tom, 1=dog, 1=cat, 1=ben}

另外HashMap還可以自己重寫hashCode和put來實現hashCode的值不一樣,從而不會被認為是同一個key。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“在Map中如何實現key唯一不重復操作”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都江堰市| 丰城市| 辛集市| 乌鲁木齐县| 杭州市| 彭山县| 晴隆县| 新野县| 淮阳县| 仙游县| 临沂市| 元朗区| 湖口县| 南岸区| 友谊县| 墨竹工卡县| 泸西县| 保亭| 浮山县| 仪陇县| 板桥市| 西乌珠穆沁旗| 莎车县| 扎赉特旗| 蒙城县| 泗洪县| 郸城县| 绩溪县| 庆安县| 延庆县| 绥德县| 临澧县| 安平县| 道真| 栖霞市| 虹口区| 邢台县| 昭觉县| 昌乐县| 辽阳市| 钦州市|