java - TreeSet的自然排序問題,也與多態(tài)有關
問題描述
問題解答
回答1:截圖紅字的理解基本沒錯但不完全,正如 @jokester 說的,你沒把代碼貼全,注意第561行 else 前面的部分。實際上,TreeMap<T>或TreeSet<T>,排序依據(jù)有兩種情況:
創(chuàng)建時帶了Comparator<? super T>,那么排序依據(jù)這個Comparator;
創(chuàng)建時不帶Comparator<? super T>,那么要求T必須實現(xiàn)Comparable。
所以看TreeSet<Person>的情況,如果創(chuàng)建時帶了Comparator<Person>,那么Person完全可以不實現(xiàn)Comparable。
另外,Integer本身實現(xiàn)了Comparable類型,所有基本類型的封裝對象(還有Long、Double、Boolean等),以及String都,都實現(xiàn)了Comparable,所以當然可以強轉。
最后留一個問題給大家,TreeMap創(chuàng)建時帶Comparator的話,為什么要指定類型Comparator<? super K>,而不是Comparator<K>或Comparator<? extends K>?參閱TreeMap的一個構造函數(shù):
public TreeMap(Comparator<? super K> comparator);
回答2:正確
因爲 class Integer implements Comparable<Integer>
