男女性高爱潮免费网站,免费人成在线观看视频播放,三级三级三级a级全黄,日日摸日日碰夜夜爽无码,国产精品久久久久精品日日,黑人巨大粗物挺进了少妇,国产麻豆一区二区三区精品视频,精品久久久久久亚洲综合网
熱門文章> hashmap和hashtable的區別 >

hashmap和hashtable的區別

36氪企服點評小編
2022-04-06 11:18
551次閱讀

| 企服解答

hashmap和hashtable的區別:1、作者不同;2、繼承的父類不同;3、產生時間;4、對外提供的接口不同;5、對Null key 和Null value的支持不同;6、線程安全性不同;7、遍歷方式的內部實現上不同;8 初始容量大小和每次擴充容量大小的不同;9 計算hash值的方法不同。

hashmap和hashtable的區別

1、作者不同

Hash Map的作者比Hashtable的作者多了著名頂頂的并發大神Doug Lea。他寫了util.concurrent包。著有并發編程圣經Concurrent Programming in Java: Design Principles and Patterns 一書。

2、繼承的父類不同

HashMap和Hashtable不僅作者不同,而且連父類也是不一樣的。HashMap是繼承自AbstractMap類,而HashTable是繼承自Dictionary類。不過它們都實現了同時實現了map、Cloneable(可復制)、Serializable(可序列化)這三個接口

3、產生時間

Hashtable是java一開始發布時就提供的鍵值映射的數據結構,而HashMap產生于JDK1.2。雖然Hashtable比HashMap出現的早一些,但是現在Hashtable基本上已經被棄用了。HashMap已經成為應用最為廣泛的一種數據類型了。造成這樣的原因一方面是因為Hashtable是線程安全的,效率比較低。另一方面可能是因為Hashtable沒有遵循駝峰命名法吧。。

4、對外提供的接口不同

Hashtable比HashMap多提供了elments() 和contains() 兩個方法。

5、對Null key 和Null value的支持不同

Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注釋中有說明。當key為Null時,調用put() 方法,運行到下面這一步就會拋出空指針異常。因為拿一個Null值去調用方法了;當value為null值時,Hashtable對其做了限制,運行到下面這步也會拋出空指針異常。

HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,可能是 HashMap中沒有該鍵,也可能使該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

6、線程安全性不同

Hashtable是線程安全的,它的每個方法中都加入了Synchronize方法。在多線程并發的環境下,可以直接使用Hashtable,不需要自己為它的方法實現同步

HashMap不是線程安全的,在多線程并發的環境下,可能會產生死鎖等問題。具體的原因在下一篇文章中會詳細進行分析。使用HashMap時就必須要自己增加同步處理,

7、遍歷方式的內部實現上不同

Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。

8、初始容量大小和每次擴充容量大小的不同

Hashtable默認的初始大小為11,之后每次擴充,容量變為原來的2n+1。HashMap默認的初始化大小為16。之后每次擴充,容量變為原來的2倍。創建時,如果給定了容量初始值,那么Hashtable會直接使用你給定的大小,而HashMap會將其擴充為2的冪次方大小。也就是說Hashtable會盡量使用素數、奇數。而HashMap則總是使用2的冪作為哈希表的大小。

9、計算hash值的方法不同

為了得到元素的位置,首先需要根據元素的 KEY計算出一個hash值,然后再用這個hash值來計算得到最終的位置。

Hashtable在計算元素的位置時需要進行一次除法運算,而除法運算是比較耗時的。

HashMap為了提高計算效率,將哈希表的大小固定為了2的冪,這樣在取模預算時,不需要做除法,只需要做位運算。位運算比除法的效率要高很多。

| 擴展閱讀

我們需要ConcurrentHashMap和CopyOnWriteArrayList的原因:

同步的集合類(Hashtable和Vector),同步的封裝類(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的對象)可以創建出線程安全的Map和List。但是有些因素使得它們不適合高并發的系統。它們僅有單個鎖,對整個集合加鎖,以及為了防止ConcurrentModificationException異常經常要在迭代的時候要將集合鎖定一段時間,這些特性對可擴展性來說都是障礙。

ConcurrentHashMap和CopyOnWriteArrayList保留了線程安全的同時,也提供了更高的并發性。ConcurrentHashMap和CopyOnWriteArrayList并不是處處都需要用,大部分時候你只需要用到HashMap和ArrayList,它們用于應對一些普通的情況。

[免責聲明]

文章標題: hashmap和hashtable的區別

文章內容為網站編輯整理發布,僅供學習與參考,不代表本網站贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請及時溝通。發送郵件至36dianping@36kr.com,我們會在3個工作日內處理。

消息通知
咨詢入駐
商務合作
主站蜘蛛池模板: 色偷偷av一区二区三区| 色婷婷综合激情综在线播放| 一二三四社区在线中文视频| 特级欧美aaaaaa片| 国产精品无码久久综合网| 欧美熟妇喷潮xxxx| 十八禁在线观看视频播放免费| 暗交小拗女一区二区三区| 欧美美女人体艺术| 亚洲欧美自拍偷一区二区| 日本亚洲欧洲另类图片| 国产爆乳无码一区二区麻豆| 爱啪啪av网| 精品无人码麻豆乱码1区2区| 国模大胆一区二区三区| 人人妻人人澡人人爽欧美一区双| 97人人模人人爽人人少妇| 自偷自拍亚洲综合精品第一页| 婷婷丁香社区| 亚洲国产区男人本色| 欧美牲交40_50a欧美牲交aⅴ| 中文在线8资源库| 欧美伊人久久大香线蕉综合| 久久国产精品偷| 国产精品亚洲欧美大片在线看| 亚洲精品国产成人| 中文字幕mv在线观看| 久久午夜夜伦鲁鲁片免费无码| 亚洲色偷偷av| 一本色道久久88加勒比—综合 | 小伙大战两老熟妇| 欧美贵妇xxxxxbbbb| 女人18毛片a级毛片免费视频| 男人狂躁进女人下面免费视频| 无码精品一区二区三区免费视频| 欧美va久久久噜噜噜久久| 国产成人av一区二区三区无码| 免费a级毛片出奶水| 又硬又粗进去好爽免费| 免费无码又爽又刺激软件下载直播| 女人脱裤子让男生桶|