搜尋

首頁  >  問答  >  主體

java - TreeSet的自然排序问题,也与多态有关

高洛峰高洛峰2803 天前578

全部回覆(2)我來回復

  • 黄舟

    黄舟2017-04-18 10:53:00

    截圖紅字的理解基本上沒錯但不完全,正如 @jokester 所說的,你沒把程式碼貼全,注意第561行 else 前面的部分。實際上,TreeMap或TreeSet,排序依據有兩種情況:

    1. 創作時帶了Comparator,那麼排序依據這個Comparator;

    2. 創建時不帶Comparator,那麼要求T必須實作Comparable。

    所以看TreeSet的情況,如果建立時帶了Comparator,那麼Person完全可以不實作Comparable。

    另外,Integer本身實作了Comparable類型,所有基本類型的封裝物件(還有Lon​​g、Double、Boolean等),以及String都,都實作了Comparable,所以當然可以強轉。

    最後留一個問題給大家,TreeMap創建時帶Comparator的話,為什麼要指定類型Comparator<? super K>,而不是Comparator<K>Comparator<? extends K>?參閱TreeMap的一個建構子:

    public TreeMap(Comparator comparator);

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:53:00

    1. 正確

    2. 因為 class Integer implements Comparable<Integer>

    回覆
    0
  • 取消回覆