国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java HashMap和HashTable的區(qū)別詳解

2019-11-26 13:23:35
字體:
供稿:網(wǎng)友

  HashMap和HashTable,這二者的區(qū)別經(jīng)常被別人問起,今天在此總結(jié)一下。

(一)繼承的歷史不同

public class Hashtable extends Dictionary implements Mappublic class HashMap extends AbstractMap implements Map

    Hashtable是繼承自Dictionary類的,而HashMap則是Java 1.2引進的Map接口的一個實現(xiàn)。

(二)安全性不同

    HashMap是非synchronized,而HashTable在默認(rèn)的情況下是synchronized,這意味著HashTable是線程安全的,多個線程可以共享一個HashTable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5以后提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。當(dāng)然,我們可以通過以下方法讓HashMap同步:

Map m = Collections.synchronizeMap(hashMap);

(三)是否可為空值的異同

    HashMap可以讓你將空值作為一個表條目的key或value。HashMap中只有一條記錄可以是一個空的key,但任意數(shù)量的條目可以是空的value。這就是說,如果在表中沒有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個空的值,那么get()將返回null;而HashTable則不行,key和value都不允許出現(xiàn)null值。

(四)二者的遍歷方式的內(nèi)部實現(xiàn)上不同

    Hashtable、HashMap都使用了 Iterator迭代器,HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。而由于歷史原因,Hashtable還使用了Enumeration的方式 。

(五)哈希值的使用不同

    HashTable直接使用對象的hashCode,而HashMap則需要重新計算hash值。

(六)二者內(nèi)部實現(xiàn)方式的數(shù)組的初始大小和擴容的方式不同

    HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1;HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 钦州市| 顺昌县| 衡东县| 塘沽区| 泸溪县| 田阳县| 镇雄县| 通道| 光山县| 上犹县| 霍城县| 河西区| 重庆市| 桐城市| 扶绥县| 滨州市| 济源市| 舞阳县| 泗洪县| 洞头县| 三河市| 林周县| 珠海市| 静海县| 红安县| 克山县| 伊金霍洛旗| 乌兰县| 炉霍县| 陕西省| 普安县| 长丰县| 汉源县| 大宁县| 佛教| 阳春市| 昌黎县| 沿河| 祁阳县| 定襄县| 兴山县|