1.hanshMap 的底層實現原理
hashmap 用hash 散法求餘存值,hash衝突就會形成鏈,形成鏈的關鍵是使用 Node節點
hanshMap 底層數據結構是數組 + 鏈表 數組是hanshMap 的主體,鏈表是爲了解決hash衝突存在的,
jdk8 對鏈表做了改進,當鏈表長度大於8的時候,會將數據存入到紅黑樹當中。
HashMap初始化數組的容量16 是2的倍數, 提高散列度,
2.遍歷map 的幾種方式
Map<String, String> paramMap = setmapValue();
//.for循環中遍歷
for (int i = 0; i < paramMap.size(); i++) {
System.out.println(paramMap.keySet());
System.out.println(paramMap.entrySet());
}
//增強型for 循環 只遍歷key值
for (String key : paramMap.keySet()) {
System.out.println(key);
}
//增強型for 循環 只遍歷value值
for (String value : paramMap.values()) {
System.out.println(value);
}
//Iterator 遍歷
Iterator<Entry<String, String>> entrs = paramMap.entrySet().iterator();
while(entrs.hasNext()) {
Entry<String, String> en = entrs.next();
System.out.println("key["+en.getKey()+"]");
System.out.println("value["+en.getValue()+"]");
}
3.TreeMap 和 TreeSet (排序集合)
元素是無序的, 會將我們排序 因爲 TreeMap 和 TreeSet 底層是基於紅黑樹存儲的
TreeMap 是鍵值對, TreeSet 是一個單獨的值, TreeSet 底層就是基於 TreeMap 實現的
往下是基於排序二叉樹存儲map 元素的,提高數據檢索性能
3.List 和 Set 區別
4.Set和hashCode以及equals方法的聯繫
Java對於eqauls方法和hashCode方法是這樣規定的:1、如果兩個對象相同,那麼它們的hashCode值一定要相同;2、如果兩個對象的hashCode相同,它們並不一定相同 上面說的對象相同指的是用eqauls方法比較。
set集合中存放的數據有一個特點,那就是無序且不重複。無序是因爲set集合中的元素沒有下座標。不重複的原因就是因爲set集合中有hashcode與equals這兩個方法。
5.List 和 Map 區別
6.Arraylist 與 LinkedList 區別
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.ArrayList 因爲基於數據實現,有index索引,獲取元素塊,刪除或增加一個元素其它的index 都要移動位置 所以慢
3.LinkedList 查詢慢因爲舉例: 要查詢第三個元素,只能通過第二個元素知道,第二個元素只能通過第一個元素知道,需要遍歷所以慢;增刪塊, 刪除第二個元素後,第一個元素直接會指向第三個開銷是固定的
7.ArrayList 與 Vector 區別
Vector 是線程安全的,ArrayList 是非線程安全的, ArrayList 效率更高。
8.HashMap 和 Hashtable 的區別
HashMap 是非線程安全的;Hashtable 是線程安全的, 每個元素都有synchronized 修飾,hashmap 效率更高
HashMap 允許空的鍵值,Hashtable 不允許
9.HashSet 和 HashMap 區別
HashSet實現了Set接口,不允許集合中有重複的值,當我們提到HashSet時,第一件事情就是在將對象存儲在HashSet之前,
要先確保對象重寫equals()和hashCode()方法,這樣才能比較對象的值是否相等,以確保set中沒有儲存相等的對象。
如果我們沒有重寫這兩個方法,將會使用這個方法的默認實現。
public boolean add(Object o)方法用來在Set中添加元素,當元素值重複時則會立即返回false,如果成功添加的話會返回true。
HashMap實現了Map接口,Map接口對鍵值對進行映射。Map中不允許重複的鍵。Map接口有兩個基本的實現,HashMap和TreeMap。
TreeMap保存了對象的排列次序,而HashMap則不能。HashMap允許鍵和值爲null。HashMap是非synchronized的,但collection框架提供方法能保證HashMap synchronized,這樣多個線程同時訪問HashMap時,能保證只有一個線程更改Map。
public Object put(Object Key,Object value)方法用來將元素添加到map中。
10.HashMap 和 ConcurrentHashMap 的區別
11.HashMap 的工作原理及代碼實現,什麼時候用到紅黑樹
hanshMap 底層數據結構是數組 + 鏈表 數組是hanshMap 的主體,鏈表是爲了解決hash衝突存在的,
jdk8 對鏈表做了改進,當鏈表長度大於8的時候,會將數據存入到紅黑樹當中。
12.多線程情況下HashMap死循環的問題
13.HashMap出現Hash DOS攻擊的問題
14.ConcurrentHashMap 的工作原理及代碼實現,如何統計所有的元素個數
15.手寫簡單的HashMap
16.看過那些Java集合類的源碼