JAVA面試筆試之-java容器(集合)

 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集合類的源碼      
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章