中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

衡水市| 尚义县| 石嘴山市| 高青县| 营口市| 同心县| 驻马店市| 濮阳市| 邢台市| 祁阳县| 竹北市| 姜堰市| 黄石市| 洛浦县| 同德县| 杭州市| 闽清县| 西充县| 岑巩县| 天津市| 东乌| 神木县| 和政县| 吉隆县| 凤冈县| 西峡县| 广德县| 邢台县| 卓尼县| 攀枝花市| 平江县| 盱眙县| 宝清县| 米脂县| 九龙坡区| 海门市| 西昌市| 滁州市| 隆子县| 锦州市| 荥阳市|