亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

HashMap 和 HashTable 有什么區別

發布時間:2021-07-06 18:13:43 來源:億速云 閱讀:161 作者:Leah 欄目:大數據

HashMap 和 HashTable 有什么區別,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1、線程是否安全:  
HashMap 是非線程安全的,HashTable 是線程安全的;  HashTable 內部的方法基本都經過  synchronized   修飾。  (如果你要保證線程安全的話就使用 ConcurrentHashMap 吧!  );
2、效率:  
因為線程安全的問題,HashMap 要比 HashTable 效率高一點。  另外,HashTable 基本被淘汰,不要在代碼中使用它;
3、對Null key 和Null value的支持:   
HashMap 中,null 可以作為鍵,這樣的鍵只有一個,可以有一個或多個鍵所對應的值為 null。  。  但是在 HashTable 中 put 進的鍵值只要有一個 null,直接拋出 NullPointerException。

4、初始容量大小和每次擴充容量大小的不同 :   
①創建時如果不指定容量初始值,Hashtable 默認的初始大小為11,之后每次擴充,容量變為原來的2n+1。  HashMap 默認的初始化大小為16。  之后每次擴充,容量變為原來的2倍。
②創建時如果給定了容量初始值,那么 Hashtable 會直接使用你給定的大小,而 HashMap 會將其擴充為2的冪次方大小(HashMap 中的  tableSizeFor()  方法保證,下面給出了源代碼)。  也就是說 HashMap 總是使用2的冪作為哈希表的大小,后面會介紹到為什么是2的冪次方。
5、底層數據結構:  
JDK1.8 以后的 HashMap 在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間。  Hashtable 沒有這樣的機制。
HashMap 中帶有初始容量的構造函數:    
public HashMap(int initialCapacity, float loadFactor) {    if (initialCapacity < 0)        throw new IllegalArgumentException("Illegal initial capacity: " +                                           initialCapacity);    if (initialCapacity > MAXIMUM_CAPACITY)        initialCapacity = MAXIMUM_CAPACITY;    if (loadFactor <= 0 || Float.isNaN(loadFactor))        throw new IllegalArgumentException("Illegal load factor: " +                                           loadFactor);    this.loadFactor = loadFactor;    this.threshold = tableSizeFor(initialCapacity);}public HashMap(int initialCapacity) {    this(initialCapacity, DEFAULT_LOAD_FACTOR);}

下面這個方法保證了 HashMap 總是使用2的冪作為哈希表的大小。

/*** Returns a power of two size for the given target capacity.*/static final int tableSizeFor(int cap) {    int n = cap - 1;    n |= n >>> 1;    n |= n >>> 2;    n |= n >>> 4;    n |= n >>> 8;    n |= n >>> 16;    return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;}

看完上述內容,你們掌握HashMap 和 HashTable 有什么區別的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

宜良县| 石城县| 龙口市| 无锡市| 关岭| 治多县| 满洲里市| 陇西县| 丹凤县| 当雄县| 罗平县| 华容县| 鹤峰县| 永济市| 长宁县| 洪洞县| 孝感市| 苍南县| 海口市| 武安市| 汤阴县| 新巴尔虎右旗| 平谷区| 平乐县| 佛坪县| 上饶县| 县级市| 黎城县| 安庆市| 云和县| 儋州市| 信宜市| 涟源市| 襄樊市| 唐河县| 宿松县| 陈巴尔虎旗| 永泰县| 泉州市| 汉中市| 新龙县|