国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理

Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理

2020-09-20 13:51動力節(jié)點 JAVA教程

HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來通過本文給大家簡單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧

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

HashMap幾乎可以等價于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap allows one null key and any number of null values.,而Hashtable則不行)。這就是說,HashMap中如果在表中沒有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個空的值,那么get()將返回null。如果有必要,用containKey()方法來區(qū)別這兩種情況。

HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。 即是說,在多線程應用程序中,不用專門的操作就安全地可以使用Hashtable了;而對于HashMap,則需要額外的同步機制。但HashMap的同步問題可通過Collections的一個靜態(tài)方法得到解決:

?
1
Map Collections.synchronizedMap(Map m)

   這個方法返回一個同步的Map,這個Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環(huán)境中也是安全的。而且Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。

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

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

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

哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的:

?
1
2
int hash = key.hashCode();
  int index = (hash & 0x7FFFFFFF) % tab.length;

而HashMap重新計算hash值,而且用與代替求模:

?
1
2
int hash = hash(k);
int i = indexFor(hash, table.length);

要注意的一些重要術(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)。

以上所述是小編給大家介紹的HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網(wǎng)站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品99久久久久久久女警 | 亚洲精品一 | 亚洲国产一区二区三区精品 | 日本久久综合 | 蜜臀精品 | 日韩精品一区二区三区在线观看视频网站 | 免费一级a毛片免费观看 | 久久伊99综合婷婷久久伊 | 久久国产精品久久久久久电车 | 性吧在线| 欧美a在线看 | 婷婷久久久 | 亚洲在线电影 | 国产成人高清 | 91网视频 | 日本一区二区三区四区 | 精品一区二区三区蜜桃 | 国内精品视频一区 | 91短视频版在线观看www免费 | 中文字幕超清在线免费 | 99精品欧美一区二区蜜桃免费 | 91精品蜜臀在线一区尤物 | 免费的黄色一级片 | 亚洲另类视频 | 在线国产小视频 | 美国成人在线 | 亚洲一区二区 | 日韩资源 | 一区二区三区在线播放 | 日本亚洲最大的色成网站www | 国产精品毛片一区视频播不卡 | 久久亚洲视频 | 在线精品日韩 | 日韩精品一区在线视频 | 国产成人黄色 | 欧美精三区欧美精三区 | 日韩欧美的一区二区 | 免费观看一级视频 | 欧美日韩精品一区二区三区四区 | 久草免费在线视频 | 欧美色综合天天久久综合精品 |