日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别

發(fā)布時間:2023/12/4 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、 HashMap

1)底層實現(xiàn)?
數(shù)組+鏈表+紅黑樹(在JDK1.8中如果鏈表長度大于8的時候才轉(zhuǎn)換為紅黑樹)


2)是否線程安全
不支持線程的同步,線程不安全,如需同步,可用Collections的synchronizedMap方法或者使用ConcurrentHashMap,調(diào)用這個對象的方法使HashMap具有同步的能力。


3)插入值操作過程

public synchronized V put(K key, V value) {// Make sure the value is not nullif (value == null) {throw new NullPointerException();}// Makes sure the key is not already in the hashtable.Entry<?,?> tab[] = table;int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;@SuppressWarnings("unchecked")Entry<K,V> entry = (Entry<K,V>)tab[index];for(; entry != null ; entry = entry.next) {if ((entry.hash == hash) && entry.key.equals(key)) {V old = entry.value;entry.value = value;return old;}}addEntry(hash, key, value, index);return null;}


4) 特點
HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null,然后和插入效率高,但是插入的數(shù)據(jù)是無序的插入、刪除和定位元素,HashMap是最好的選擇


5)hashmap什么時候進行擴容
當hashmap中的元素個數(shù)超過數(shù)組大小loadFactor時,就會進行數(shù)組擴容,loadFactor的默認值為0.75,也就是說,默認情況下,數(shù)組大小為16那么當hashmap中元素個數(shù)超過160.75=12的時候就把數(shù)組的大小擴展為2*16=32,即擴大一倍,然后重新計算每個元素在數(shù)組中的位置,而這是一個非常消耗性能的操作。

?

?

?

?

?

?

二、 Hashtable


1)底層實現(xiàn)
它繼承自Dictionary類

2)是否線程安全
支持線程的同步,線程安全,即任一時刻只有一個線程能寫Hashtable,因此也導致了 Hashtable在寫入時會比較慢

?

?

?

?

?

?

?

三、LinkedHashMap


1)底層實現(xiàn)
雙向鏈表+HashMap(LinkedHashMap是繼承于HashMap)


2) 是否支持線程安全
不支持線程的同步,線程不安全


3)特點
保存了記錄的插入順序,也就是數(shù)據(jù)是有序的,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的, 也可以在構(gòu)造時用帶參數(shù),按照應(yīng)用次數(shù)排序,一般在遍歷的時候會比HashMap慢,有HashMap的全部特性,不過有種情況例外,當HashMap容量很大,實際數(shù)據(jù)較少時,遍歷起來可能會比LinkedHashMap慢,因為LinkedHashMap的遍歷速度只和實際數(shù)據(jù)有關(guān),和容量無關(guān),而HashMap的遍歷速度和他的容量有關(guān)。

?

?


四、TreeMap


1)底層實現(xiàn)
紅黑樹


2)是否線程安全
不支持線程的同步,線程不安全


3)特點
TreeMap實現(xiàn)SortMap接口,能夠把它保存的記錄根據(jù)鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的

?

?

?

?

五、ConcurrentHashMap


1)底層實現(xiàn)
拓展了Hashtable,底層采用分段的數(shù)組+鏈表實現(xiàn)


2)是否線程安全
支持線程的同步,線程安全,即任一時刻只有一個線程能寫ConcurrentHashMap。


3)特點
鎖分離技術(shù),段內(nèi)擴容,ConcurrentHashMap對分開兩次操作也是安全的。
?
?

總結(jié)

以上是生活随笔為你收集整理的Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。