一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - HashMap 和 Hashtable的區(qū)別

HashMap 和 Hashtable的區(qū)別

2020-06-11 16:26唐小娟 JAVA教程

本文主要介紹HashMap 和 Hashtable的區(qū)別,這里整理了相關(guān)資料并詳細介紹了HashMap 和 Hashtable的區(qū)別及其工作原理和使用方法,有需要的朋友可以看一下

HashMap和Hashtable的比較是Java面試中的常見問題,用來考驗程序員是否能夠正確使用集合類以及是否可以隨機應(yīng)變使用多種思路解決問題。HashMap的工作原理、ArrayList與Vector的比較以及這個問題是有關(guān)Java 集合框架的最經(jīng)典的問題。Hashtable是個過時的集合類,存在于Java API中很久了。在Java 4中被重寫了,實現(xiàn)了Map接口,所以自此以后也成了Java集合框架中的一部分。Hashtable和HashMap在Java面試中相當容易被問到,甚至成為了集合框架面試題中最常被考的問題,所以在參加任何Java面試之前,都不要忘了準備這一題。

這篇文章中,我們不僅將會看到HashMap和Hashtable的區(qū)別,還將看到它們之間的相似之處。

HashMap和Hashtable的區(qū)別

HashMap和Hashtable都實現(xiàn)了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。

  1. HashMap幾乎可以等價于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。
  2. HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。
  3. 另一個區(qū)別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。
  4. 由于Hashtable是線程安全的也是synchronized,所以在單線程環(huán)境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。
  5. HashMap不能保證隨著時間的推移Map中的元素次序是不變的。

要注意的一些重要術(shù)語:

1) sychronized意味著在一次僅有一個線程能夠更改Hashtable。就是說任何線程要更新Hashtable時要首先獲得同步鎖,其它線程要等到同步鎖被釋放之后才能再次獲得同步鎖更新Hashtable。

2) Fail-safe和iterator迭代器相關(guān)。如果某個集合對象創(chuàng)建了Iterator或者ListIterator,然后其它的線程試圖“結(jié)構(gòu)上”更改集合對象,將會拋出ConcurrentModificationException異常。但其它線程可以通過set()方法更改集合對象是允許的,因為這并沒有從“結(jié)構(gòu)上”更改集合。但是假如已經(jīng)從結(jié)構(gòu)上進行了更改,再調(diào)用set()方法,將會拋出IllegalArgumentException異常。

3) 結(jié)構(gòu)上的更改指的是刪除或者插入一個元素,這樣會影響到map的結(jié)構(gòu)。

我們能否讓HashMap同步?

HashMap可以通過下面的語句進行同步:
Map m = Collections.synchronizeMap(hashMap);

結(jié)論

Hashtable和HashMap有幾個主要的不同:線程安全以及速度。僅在你需要完全的線程安全的時候使用Hashtable,而如果你使用Java 5或以上的話,請使用ConcurrentHashMap吧。

原文鏈接: Javarevisited 翻譯: ImportNew.com - 唐小娟
譯文鏈接: http://www.importnew.com/7010.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 无套内谢大学生A片 | 亚洲国产在线2o20 | 成人免费毛片一区二区三区 | 精品9e精品视频在线观看 | 国产精品久久久久久久久 | 国产亚洲sss在线播放 | 免费操比视频 | melody中文字幕 | 国产偷窥女洗浴在线观看亚洲 | 韩国三级 720p | 婷婷色六月 | 果冻传媒天美传媒网址入口 | 国产青色| 国产日韩欧美在线一二三四 | 国产91页 | 青青久久精品国产 | 国产精品亚洲精品日韩已满 | 精品精品精品 | 成年人视频在线 | 亚洲成a人不卡在线观看 | 91porn最新地址 | aaa在线| 国产一区在线看 | 国产日韩欧美 | 国产精品酒店视频免费看 | 精品一区二区三区视频日产 | 黄瓜视频黄 | 成人二区 | 肥胖老寡妇做性 | 99久久精品国内 | 色哟哟观看 | 四虎国产精品免费久久久 | 香蕉在线精品一区二区 | acg火影忍者熟密姬纲手h | 国产精品青青在线观看香蕉 | 青青草原手机在线视频 | 色婷婷久 | 欧美a级完整在线观看 | 天天做天天爱天天一爽一毛片 | 国产国语在线播放视频 | 成人性生交大片免费看软件 |