久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

HashMap和HashTable的選擇

 日月桃子 2018-05-29

關(guān)于編程中HashMap和HashTable的選擇問題,我們可以先看看下面這些問題,。

歷史問題

Hashtable是個(gè)過時(shí)的集合類,,是基于陳舊的Dictionary類的,并且存在于Java API中很久了,。在Java 4中被重寫了,,實(shí)現(xiàn)了Map接口,所以自此以后也成了Java集合框架中的一部分,,而HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn),。

同步問題

HashMap是非synchronized,而Hashtable是synchronized,,這意味著Hashtable是線程安全的,,多個(gè)線程可以共享一個(gè)Hashtable;而如果沒有正確的同步的話,,多個(gè)線程是不能共享HashMap的,。Java 5提供了ConcurrentHashMap,它是HashTable的替代,,比HashTable的擴(kuò)展性更好,。

迭代問題

HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),,將會(huì)拋出ConcurrentModificationException,,但迭代器本身的remove()方法移除元素則不會(huì)拋出ConcurrentModificationException異常。但這并不是一個(gè)一定發(fā)生的行為,,要看JVM,。這條同樣也是Enumeration和Iterator的區(qū)別。

key值問題

HashMap可以讓你將空值作為一個(gè)表的條目的key或value,。HashMap中只有一條記錄可以是一個(gè)空的key,,但任意數(shù)量的條目可以是空的value。這就是說,,如果在表中沒有發(fā)現(xiàn)搜索鍵,,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個(gè)空的值,,那么get()將返回null,。如果有必要,用containKey()方法來區(qū)別這兩種情況,。

效率問題

由于Hashtable是線程安全的也是synchronized,,所以在單線程環(huán)境下它比HashMap要慢。如果你不需要同步,,只需要單一線程,,那么使用HashMap性能要好過Hashtable。

元素順序

HashMap不能保證隨著時(shí)間的推移Map中的元素次序是不變的,。

HashMap同步

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

術(shù)語解釋

sychronized

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

fail-fast and fail-safe

關(guān)于fail-fast and fail-safe,,可以參考這篇文章Fail Fast vs Fail Safe

總結(jié)

在目前的編程中基本上可以不用HashTable了,在不要求線程安全的情況下直接使用HashMap,,效率比較高;如果,,要求線程安全,,則使用ConcurrentHashMap來代替HashMap。

參考

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多