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

Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

 更新時間:2023年10月24日 09:12:13   作者:不是懶大王  
HashMap和HashSet都是存儲在哈希桶之中,通過本文我們可以先了解一些哈希桶是什么,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧

HashMap和HashSet都是存儲在哈希桶之中,我們可以先了解一些哈希桶是什么。

像這樣,一個數(shù)組數(shù)組的每個節(jié)點帶著一個鏈表,數(shù)據(jù)就存放在鏈表結(jié)點當中。哈希桶插入/刪除/查找節(jié)點的時間復雜度是O(1)

map代表存入一個key值,一個val值。map可多次存儲,當?shù)诙尾迦霑r,會更新val值。

set代表只存入一個key值,但在實際源碼中,set的底層其實也是靠map來實現(xiàn)的。set只能存入數(shù)據(jù)一次,當?shù)诙尾迦霑r,若哈希桶中存在元素則返回false。

下面是代碼實現(xiàn)

// key-value 模型
public class HashBucket {
private static class Node {
private int key;
private int value;
Node next;
public Node(int key, int value) {
this.key = key;
this.value = value;
}
}
private Node[] array;
private int size; // 當前的數(shù)據(jù)個數(shù)
private static final double LOAD_FACTOR = 0.75;
public int put(int key, int value) {
int index = key % array.length;
// 在鏈表中查找 key 所在的結(jié)點
// 如果找到了,更新
// 所有結(jié)點都不是 key,插入一個新的結(jié)點
for (Node cur = array[index]; cur != null; cur = cur.next) {
if (key == cur.key) {
int oldValue = cur.value;
cur.value = value;
return oldValue;
}
} N
ode node = new Node(key, value);
node.next = array[index];
array[index] = node;
size++;
if (loadFactor() >= LOAD_FACTOR) {
resize();
} r
eturn -1;
}
private void resize() {
Node[] newArray = new Node[array.length * 2];
for (int i = 0; i < array.length; i++) {
Node next;
for (Node cur = array[i]; cur != null; cur = next) {
next = cur.next;
int index = cur.key % newArray.length;
cur.next = newArray[index];
newArray[index] = cur;
}
} a
rray = newArray;
}
private double loadFactor() {
return size * 1.0 / array.length;
}
public HashBucket() {
array = new Node[8];
size = 0;
}
public int get(int key) {
int index = key % array.length;
Node head = array[index];
for (Node cur = head; cur != null; cur = cur.next) {
if (key == cur.key) {
return cur.value;
}
} 
return -1;
}
}

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet的文章就介紹到這了,更多相關(guān)java HashMap和HashSet內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 多個版本JAVA切換的簡單步驟記錄

    多個版本JAVA切換的簡單步驟記錄

    在工作中或者學習過程中,有一些特殊情況我們需要來切換java版本來做比較,比如一些新特性等等的相關(guān)資料,這篇文章主要介紹了多個版本JAVA切換的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • SpringBoot3集成Thymeleaf的過程詳解

    SpringBoot3集成Thymeleaf的過程詳解

    在現(xiàn)代的Web開發(fā)中,構(gòu)建靈活、動態(tài)的用戶界面是至關(guān)重要的,Spring Boot和Thymeleaf的結(jié)合為開發(fā)者提供了一種簡單而強大的方式來創(chuàng)建動態(tài)的Web應用,本文將介紹如何在Spring Boot項目中集成Thymeleaf,并展示一些基本的使用方法,需要的朋友可以參考下
    2024-01-01
  • MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能

    MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能

    這篇文章主要介紹了MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • java實現(xiàn)電腦端掃描二維碼

    java實現(xiàn)電腦端掃描二維碼

    這篇文章主要為大家詳細介紹了java實現(xiàn)電腦端掃描二維碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • spring boot利用docker構(gòu)建gradle項目的實現(xiàn)步驟

    spring boot利用docker構(gòu)建gradle項目的實現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于spring boot利用docker構(gòu)建gradle項目的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2018-05-05
  • Java優(yōu)雅的關(guān)閉線程池的方法

    Java優(yōu)雅的關(guān)閉線程池的方法

    本文主要介紹了Java如何優(yōu)雅的關(guān)閉線程池,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • MyBatis會話模塊詳解

    MyBatis會話模塊詳解

    本文主要介紹了MyBatis會話模塊詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • logback自定義json日志輸出示例詳解

    logback自定義json日志輸出示例詳解

    這篇文章主要為大家介紹了logback自定義json日志輸出,就是通過logback日志體系以及l(fā)ogstash提供的json?log依賴將數(shù)據(jù)以json格式記錄到日志文件的例子
    2022-03-03
  • mybatis取別名typeAliases標簽的位置放錯導致報錯的解決

    mybatis取別名typeAliases標簽的位置放錯導致報錯的解決

    這篇文章主要介紹了mybatis取別名typeAliases標簽的位置放錯導致報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SWT(JFace)體驗之List演示匯總

    SWT(JFace)體驗之List演示匯總

    SWT(JFace)體驗之List演示代碼匯總
    2009-06-06

最新評論

卫辉市| 大悟县| 宜川县| 岳阳市| 永胜县| 沅陵县| 郑州市| 精河县| 衡南县| 同心县| 东港市| 贵定县| 洛浦县| 桑植县| 西林县| 沂水县| 望城县| 翁牛特旗| 谢通门县| 瑞昌市| 湖州市| 灌阳县| 泽库县| 河北区| 秦安县| 泸溪县| 雷州市| 广水市| 剑阁县| 威远县| 丹东市| 玛沁县| 莱州市| 吉木萨尔县| 郯城县| 普洱| 清苑县| 澄江县| 青神县| 恩施市| 汉中市|