Map集合面試題


    一.了解Map集合嗎?Map集合都有哪些實現
        1.HashMap   HashTable    LinkedHashMap   TreeMap   ConcurrentHashMap
    


    二.HashMap和HashTable之間的區別
        1.HashMap:底層基於數組+單向鏈表(紅黑樹),非線程安全,默認容量為16,允許有空的鍵和值
            數組:Node<K,V> [] table ,每一個元素都是一個Node
            單向鏈表:Node<K,V> next,當發生Hash碰撞,會追加鏈表,當鏈表長度大於8,那就轉換為紅黑樹
        2.HashTable:底層基於哈希表實現,線程是安全的,默認容量為11,不允許有空的鍵和值
    


    三.hashCode()和equals()方法使用場景
        hashCode():頂級父類Object當中的方法,返回值類型為int類型的值,根據一定的規則(存儲地址,字段,長度等等)生成一個數組,數據保存的就是Hash值
        equals():頂級類Object中的方法,根據一定的比較規則,判斷對象是否一致,底層一般邏輯:
            1.判斷兩個對象的內存地址是否一樣
            2.非空判斷和Class類型判斷
            3.強轉
            4.對象中的字段一一匹配
    


    四.HashMap和TreeMap應該如何選擇
        HashMap:底層采用數組+鏈表(紅黑樹)結構,可以實現快速的存儲和檢索,但是數據是無序的,適用於在Map當中插入刪除或者獲取元素
        
        TreeMap: 存儲結構是一個平衡二叉樹,具體實現方式為紅黑樹,默認采用自然排序,可以自定義排序規則,但是需要實現Comparator接口
                 能夠便捷的實現內部元素的各種排序,但是性能比HashMap差,適用於按照自然排序和自定義排序規則
       
        
    五.Set和Map的關系
        Set核心就是保存不重復的元素,存儲一組唯一的對象
        set當中每一種實現都對應Map
        HashSet對應的HashMap,TreeSet對應的TreeMap
    


    六.常見的Map排序規則
        按照添加規則使用LinkedHashMap,按照自然排序或者自定義規則排序可以采用TreeMap
    


    七.如何保證Map線程安全
        多線程環境下,可以使用concurrent包下有一個ConcurrentHashMap或者是使用Collections.synchronizedList(new HashMap<K,V>());
        
        ConcurrentHashMap保證線程安全,效率比HashTable高
        
        JDK1.7版本:ReentrantLock+Segment+HashEntry
        JDK1.8版本:synchronized+CAS+HashEntry+紅黑樹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM