最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Map中實現(xiàn)key唯一不重復(fù)操作

 更新時間:2021年08月28日 14:36:51   作者:正版小神龍  
這篇文章主要介紹了在Map中實現(xiàn)key唯一不重復(fù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Map中如何實現(xiàn)key唯一不重復(fù)

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

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

解釋: HashMap屬于散列存儲結(jié)構(gòu),其table的存儲是放在不同的Jvm內(nèi)存區(qū)域。通過一個整型值來標(biāo)識table的區(qū)域,相當(dāng)于這個區(qū)域的下標(biāo)。然后整個查找過程就從不再需要遍歷整個table,只需遍歷這一區(qū)域的數(shù)據(jù)即可。

結(jié)合HashMap.class中的put方法來說明:

如何找到這個區(qū)域呢?

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

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

得到這個區(qū)域以后,再遍歷這個區(qū)域來找到對應(yīng)的元素

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

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

Map放入相同的key值

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

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

HashMap比較key的值是用equals來比較的,所以只要key的值一樣,就會被認(rèn)為是同一個key。而IdentityHashMap是用==來比較key的存放地址,所以,只要我們重新new出來一個對象,就可以把值相同的key定義為值相等但地址不相同的key,這樣就不會被認(rèn)為是同一個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);
 }
}

輸出結(jié)果是:

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

另外HashMap還可以自己重寫hashCode和put來實現(xiàn)hashCode的值不一樣,從而不會被認(rèn)為是同一個key,繼續(xù)研究。。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot3整合Mybatis3的完整步驟記錄

    Springboot3整合Mybatis3的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Springboot3整合Mybatis3的完整步驟,Spring Boot和MyBatis分別是兩個功能強大的框架,它們的協(xié)同使用可以極大地簡化數(shù)據(jù)訪問層的開發(fā),提高整體的開發(fā)效率,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 分享幾個Java工作中實用的代碼優(yōu)化技巧

    分享幾個Java工作中實用的代碼優(yōu)化技巧

    這篇文章主要給大家分享幾個Java工作中實用代碼優(yōu)化技巧,文章基于Java的相關(guān)資料展開對其優(yōu)化技巧的分享,需要的小伙伴可以參考一下
    2022-04-04
  • Java Web實現(xiàn)添加定時任務(wù)的方法示例

    Java Web實現(xiàn)添加定時任務(wù)的方法示例

    這篇文章主要介紹了Java Web實現(xiàn)添加定時任務(wù)的方法,涉及java web定時任務(wù)控制類定義、調(diào)用及監(jiān)聽器定義、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程

    IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程

    這篇文章主要介紹了IDEA設(shè)置JVM可分配內(nèi)存大小和其他參數(shù)的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java線程的全方位詳解

    Java線程的全方位詳解

    Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù),多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷
    2021-10-10
  • mybatis框架的xml映射文件常用查詢指南

    mybatis框架的xml映射文件常用查詢指南

    這篇文章主要給大家介紹了關(guān)于mybatis框架的xml映射文件常用查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java8 Collectors求和功能的自定義擴展操作

    Java8 Collectors求和功能的自定義擴展操作

    這篇文章主要介紹了Java8 Collectors求和功能的自定義擴展操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java實現(xiàn)將方法作為參數(shù)傳遞的方法小結(jié)

    Java實現(xiàn)將方法作為參數(shù)傳遞的方法小結(jié)

    在Java編程中,將方法作為參數(shù)傳遞是一種強大的技術(shù),可以提高代碼的靈活性和可重用性,本文將探討幾種在Java中實現(xiàn)這一目標(biāo)的方法,需要的朋友可以參考下
    2025-03-03
  • spring初始化源碼代碼淺析

    spring初始化源碼代碼淺析

    Spring框架被廣泛應(yīng)用于我們的日常工作中,但是很長時間以來我們都是只會使用,不懂它的作用原理,下面這篇文章主要給大家介紹了關(guān)于spring初始化源碼的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • jdbc連SQL?server顯示1433端口連接失敗圖文解決方法

    jdbc連SQL?server顯示1433端口連接失敗圖文解決方法

    這篇文章主要給大家介紹了關(guān)于jdbc連SQL?server顯示1433端口連接失敗的圖文解決方法,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-06-06

最新評論

灵璧县| 左贡县| 务川| 昌吉市| 凤凰县| 沁阳市| 高清| 宁河县| 神池县| 体育| 南平市| 汝南县| 长沙市| 浦北县| 韶山市| 龙游县| 平凉市| 阿克陶县| 北宁市| 江口县| 嘉义市| 井冈山市| 永胜县| 舒兰市| 浮梁县| 淮阳县| 辽阳县| 娄烦县| 兰考县| 开江县| 顺昌县| 绥棱县| 孝义市| 高安市| 缙云县| 浮山县| 南乐县| 阿鲁科尔沁旗| 鄂托克前旗| 芮城县| 永顺县|