91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

HashMap和Hashtable有什么不同

發布時間:2021-07-09 17:26:09 來源:億速云 閱讀:199 作者:Leah 欄目:大數據

HashMap和Hashtable有什么不同,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

線程安全

兩者最主要的區別在于Hashtable是線程安全,而HashMap則非線程安全。Hashtable的實現方法里面都添加了synchronized關鍵字來確保線程同步,因此相對而言HashMap性能會高一些,我們平時使用時若無特殊需求建議使用HashMap,在多線程環境下若使用HashMap需要使用Collections.synchronizedMap()方法來獲取一個線程安全的集合(Collections.synchronizedMap()實現原理是Collections定義了一個SynchronizedMap的內部類,這個類實現了Map接口,在調用方法時使用synchronized來保證線程同步,當然了實際上操作的還是我們傳入的HashMap實例,簡單的說就是Collections.synchronizedMap()方法幫我們在操作HashMap時自動添加了synchronized來實現線程同步,類似的其它Collections.synchronizedXX方法也是類似原理。

NULL值

HashMap可以使用null作為key,不過建議還是盡量避免這樣使用。HashMap以null作為key時,總是存儲在table數組的第一個節點上。當get()方法返回null 值時,既可以表示HashMap 中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap 中不能用get()方法來判斷HashMap 中是否存在某個鍵,而應該用containsKey()方法來判斷。而Hashtable則不允許null作為key。

繼承關系

HashMap繼承了AbstractMap,HashTable繼承Dictionary抽象類,兩者均實現Map接口。

容量初始值

HashMap的初始容量為16,Hashtable初始容量為11,兩者的填充因子默認都是0.75。

擴容方式

HashMap擴容時是當前容量翻倍即:capacity*2,Hashtable擴容時是容量翻倍+1即:capacity*2+1。


底層結構

HashMap和Hashtable的底層實現都是數組+鏈表結構實現。

哈希算法

Hashtable計算hash是直接使用key的hashcode對table數組的長度直接進行取模:

    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
 

HashMap計算hash對key的hashcode進行了二次hash,以獲得更好的散列值,然后對table數組長度取摸:

    static int hash(int h) {
         h ^= (h >>> 20) ^ (h >>> 12);
         return h ^ (h >>> 7) ^ (h >>> 4);
     }

    static int indexFor(int h, int length) {
         return h & (length-1);
     }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

永春县| 嵊泗县| 阿图什市| 和田市| 山阳县| 古丈县| 海口市| 沈阳市| 金堂县| 微博| 武平县| 乌鲁木齐市| 宣汉县| 钟山县| 安康市| 中西区| 涿鹿县| 浦江县| 栾川县| 威海市| 岳阳县| 岳阳市| 芦溪县| 山东省| 巩义市| 孙吴县| 四子王旗| 虎林市| 抚宁县| 和静县| 九龙县| 莱芜市| 荃湾区| 民权县| 嘉义市| 自治县| 靖边县| 遂平县| 林周县| 普兰店市| 新化县|