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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

HashMap和HashTable

2019-11-14 09:04:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Hashtable和HashMap的區(qū)別 1.Hashtable是Dictionary的子類(lèi),HashMap是Map接口的一個(gè)實(shí)現(xiàn)類(lèi);2.Hashtable中的方法是同步(synchronize)的,而HashMap中的方法在缺省情況下是非同步的。即是說(shuō),在多線程應(yīng)用程序中,不用專(zhuān)門(mén)的操作就安全地可以使用Hashtable了;而對(duì)于HashMap,則需要額外的同步機(jī)制。但HashMap的同步問(wèn)題可通過(guò)Collections的一個(gè)靜態(tài)方法得到解決:Map Collections.synchronizedMap(Map m)這個(gè)方法返回一個(gè)同步的Map,這個(gè)Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環(huán)境中也是安全的。3.在HashMap中,null可以作為鍵,這樣的鍵只有一個(gè);可以有一個(gè)或多個(gè)鍵所對(duì)應(yīng)的值為null。當(dāng)get()方法返回null值時(shí),即可以表示HashMap中沒(méi)有該鍵,也可以表示該鍵所對(duì)應(yīng)的值為null。因此,在HashMap中不能由get()方法來(lái)判斷HashMap中是否存在某個(gè)鍵,而應(yīng)該用containsKey()方法來(lái)判斷。4.其底層的實(shí)現(xiàn)機(jī)制不同,hashmap的訪問(wèn)速度要快于hashtable,因?yàn)樗恍枰M(jìn)行同步檢驗(yàn),建議在非多線程環(huán)境中使用hashmap代替hashtable .HashTable的應(yīng)用非常廣泛,HashMap是新框架中用來(lái)代替HashTable的類(lèi),也就是說(shuō)建議使用HashMap,不要使用HashTable??赡苣阌X(jué)得HashTable很好用,為什么不用呢?這里簡(jiǎn)單分析他們的區(qū)別。 1.HashTable的方法是同步的,HashMap未經(jīng)同步,所以在多線程場(chǎng)合要手動(dòng)同步HashMap這個(gè)區(qū)別就像Vector和ArrayList一樣。2.HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。3.HashTable有一個(gè)contains(Object value),功能和containsValue(Object value)功能一樣。4.HashTable使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它們的實(shí)現(xiàn)也有很大的不同。5.HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1。  HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。6.哈希值的使用不同,HashTable直接使用對(duì)象的hashCode,代碼是這樣的: int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; 而HashMap重新計(jì)算hash值,而且用與代替求模: int hash = hash(k); int i = indexFor(hash, table.length);static int hash(Object x) {   int h = x.hashCode();  h += ~(h < < 9);   h ^= (h >>> 14);   h += (h < < 4);   h ^= (h >>> 10);   return h; } static int indexFor(int h, int length) {   return h & (length-1); } 
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 辉南县| 陆丰市| 肇州县| 临邑县| 清流县| 大宁县| 新乡县| 和顺县| 天津市| 蕉岭县| 米泉市| 白河县| 习水县| 华容县| 罗江县| 颍上县| 昌平区| 乐业县| 呼伦贝尔市| 大埔区| 宁乡县| 昌吉市| 河北区| 宁强县| 石家庄市| 桂林市| 洪湖市| 武平县| 建昌县| 金溪县| 广丰县| 连云港市| 牡丹江市| 高碑店市| 申扎县| 抚州市| 弋阳县| 高青县| 荣昌县| 临桂县| 盐城市|