男女性潮高清免费网站,久久精品国产亚洲av麻豆图片,啊灬啊别停灬用力啊岳,国产天堂亚洲国产碰碰,亚洲精品一区二区久久,久久人人爽人人爽人人片av高清 ,久久本道综合久久伊人,伊人情涩网
熱門文章> hashmap和hashtable的區別 >

hashmap和hashtable的區別

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

| 企服解答

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| 国产激情视频一区二区三区| 亚洲天堂av 在线| 最近中文国语字幕在线播放| 欧美午夜一区二区福利视频 | 国产综合久久久久久鬼色| 两个人在线观看高清视频| 久久成人影院精品777| 久久久精品人妻一区二区三区四| 在线观看国产黄片av| 精品人妻少妇一区二区| 欧美日韩国产精品自在自线| 国产精品多p对白交换绿帽| 好男人2019在线视频播放观看| 免费120秒试看| 一区二区三区精品影院| 最近的中文字幕视频完整| 成全视频在线观看更新时间| 亚洲婷婷综合色高清在线| 精品国偷自产在线| 啦啦啦www免费高清在线观看视频| 亚洲av无码av制服丝袜在线| 免费观看成人欧美www色| 波多野结衣 黑人| 亚洲精品久久久久avwww潮水| 邻居少妇张开腿让我爽了一夜视频 | 亚洲精品无码人妻无码| 夜夜澡人摸人人添人人看| 脱了美女内裤猛烈进入gif| 国产精品 精品国内自产拍| 中文字幕人妻第一区| chinese激烈高潮hd | 欧美性猛交xxx×乱大交3| 免费国产乱理伦片在线观看| 十八禁在线观看视频播放免费| 国产精品久久..4399| 人妻洗澡被强公日日澡| 国产果冻豆传媒麻婆| 国产99久60在线视频 | 传媒| 蜜桃成熟时快播|