1.HashMap和HashTable的區(qū)別
- HashMap不是線程安全的能真,適合在單線程的環(huán)境下使用,想要在多線程的環(huán)境下使用需要手動同步辫愉,Collections.synchronizedMap顽决;HashTable是線程安全的,支持多線程環(huán)境下使用
- HashMap的key和value值都可以為null汉规,HashTable的key和value值都不允許為null
- HashMap 中數(shù)組的默認(rèn)大小是 16礼殊,而且一定是 2 的倍數(shù)驹吮,擴容后的數(shù)組長度是之 前數(shù)組長度的 2 倍。HashTable 中數(shù)組默認(rèn)大小是 11晶伦,擴容后的數(shù)組長度是之前數(shù)組長度 的 2 倍+1
- 判斷是否含有某個鍵
在 HashMap 中碟狞,null 可以作為鍵,這樣的鍵只有一個婚陪;可以有一個或多個鍵所對
應(yīng)的值為 null族沃。當(dāng) get()方法返回 null 值時,既可以表示 HashMap 中沒有該鍵泌参,也可
以表示該鍵所對應(yīng)的值為 null脆淹。因此,在 HashMap 中不能用 get()方法來判斷 HashM
ap 中是否存在某個鍵沽一,而應(yīng)該用 containsKey()方法來判斷盖溺。Hashtable 的鍵值都不能
為 null,所以可以用 get()方法來判斷是否含有某個鍵
2.WeakHashMap VS HashMap
WeakHashMap 中的 key 采用的是“弱引用”的方式铣缠,只要 WeakHashMap 中的 key 不再被外部引用烘嘱,所對應(yīng)的鍵值對就可以被垃圾回收器回收。
HashMap 中的 key 采用的是“強引用”的方式蝗蛙,當(dāng) key 不再被外部引用 時蝇庭,只有當(dāng)這個 key 從 HashMap 中刪除后,才可以被垃圾回收器回收歼郭。
3.HashMap和TreeMap的區(qū)別
- HashMap基于數(shù)組+鏈表+紅黑樹實現(xiàn)遗契,而TreeMap基于紅黑樹實現(xiàn)
- TreeMap中的元素是根據(jù)鍵值排序的
- HashMap適用于插入、查找病曾、刪除元素牍蜂,而TreeMap適合按自然順序遍歷鍵。
HashMap通常比TreeMap快一點
4.HashSet原理小結(jié)
- hashSet內(nèi)部用HashMap來存儲元素
- HashSet利用本身的值來計算hash值泰涂,因為值被當(dāng)作hashmap的key鲫竞,而hashmap是利用key來計算hash值的
- 因為hashset將value當(dāng)作key來存儲,所以根據(jù)map的key值唯一的原理逼蒙,我們就可以實現(xiàn)set的無重復(fù)元素的功能从绘,用PRESENT這個Object類型的靜態(tài)的類對象,當(dāng)作value
5.fail-fast機制
假設(shè)存在兩個線程(線程 1是牢、線程 2)僵井,線程 1 通過 Iterator 在遍歷 集合 A 中的元素,在某個時候線程 2 修改了集合 A 的結(jié)構(gòu)(是結(jié)構(gòu)上面的修改驳棱, 而不是簡單的修改集合元素的內(nèi)容)批什,那么這個時候程序就會拋出 ConcurrentModificationException 異常,從而產(chǎn)生 fail-fast 機制
產(chǎn)生原因:
當(dāng)調(diào)用容器的 iterator()方法返回 Iterater 對象時社搅,把容器中包含對象 的個數(shù)賦值給了一個變量 expectedModCount,在調(diào)用 next()方法時驻债,會比較 expectedModCount 與容器中實際對象的個數(shù)是否相等乳规,若二者不相等,則會拋 出 ConcurrentModificationException 異常
6.介紹一下Java中的集合框架
7.Collection和Collections的區(qū)別:
- Collection是集合類的上級接口合呐,子接口主要有l(wèi)ist和set
- Collections是針對集合類的幫助類暮的,提供了操作集合的工具方法,一系列靜態(tài)方法實現(xiàn)對集合的搜索淌实,排序冻辩,線程安全化操作
-+