TreeMap和ConcurrentHashMap總結(jié)

TreeMap底層是紅黑樹,能夠?qū)崿F(xiàn)該Map集合有序~

如果在構(gòu)造方法中傳遞了Comparator對象,那么就會以Comparator對象的方法進行比較。否則,則使用Comparable的compareTo(T o)方法來比較。

  • 值得說明的是:如果使用的是compareTo(T o)方法來比較,key一定是不能為null,并且得實現(xiàn)了Comparable接口的。
  • 即使是傳入了Comparator對象,不用compareTo(T o)方法來比較,key也是不能為null的

    public static void main(String[] args) {
        TreeMap<Student, String> map = new TreeMap<Student, String>((o1, o2) -> {
            //主要條件
            int num = o1.getAge() - o2.getAge();

            //次要條件
            int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;

            return num2;
        });

        //創(chuàng)建學生對象
        Student s1 = new Student("潘安", 30);
        Student s2 = new Student("柳下惠", 35);

        //添加元素進集合
        map.put(s1, "宋朝");
        map.put(s2, "元朝");
        map.put(null, "漢朝");

        //獲取key集合
        Set<Student> set = map.keySet();

        //遍歷key集合
        for (Student student : set) {
            String value = map.get(student);
            System.out.println(student + "---------" + value);
        }
    }

image.png

我們從源碼中的很多地方中發(fā)現(xiàn):Comparator和Comparable出現(xiàn)的頻率是很高的,因為TreeMap實現(xiàn)有序要么就是外界傳遞進來Comparator對象,要么就使用默認key的Comparable接口(實現(xiàn)自然排序)

最后我就來總結(jié)一下TreeMap要點吧:

  1. 由于底層是紅黑樹,那么時間復雜度可以保證為log(n)
  2. key不能為null,為null為拋出NullPointException的
  3. 想要自定義比較,在構(gòu)造方法中傳入Comparator對象,否則使用key的自然排序來進行比較
  4. TreeMap非同步的,想要同步可以使用Collections來進行封裝

ConcurrentHashMap的核心要點

  • 底層結(jié)構(gòu)是散列表(數(shù)組+鏈表)+紅黑樹,這一點和HashMap是一樣的。
  • Hashtable是將所有的方法進行同步,效率低下。而ConcurrentHashMap作為一個高并發(fā)的容器,它是通過部分鎖定+CAS算法來進行實現(xiàn)線程安全的。CAS算法也可以認為是樂觀鎖的一種~
  • 在高并發(fā)環(huán)境下,統(tǒng)計數(shù)據(jù)(計算size...等等)其實是無意義的,因為在下一時刻size值就變化了。
  • get方法是非阻塞,無鎖的。重寫Node類,通過volatile修飾next來實現(xiàn)每次獲取都是最新設(shè)置的值
  • ConcurrentHashMap的key和Value都不能為null

個人GitHub項目,記錄學習Java知識的過程 歡迎star

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容