黄舟2017-04-18 10:53:00
截圖紅字的理解基本上沒錯但不完全,正如 @jokester 所說的,你沒把程式碼貼全,注意第561行 else 前面的部分。實際上,TreeMap
創作時帶了Comparator super T>,那麼排序依據這個Comparator;
創建時不帶Comparator super T>,那麼要求T必須實作Comparable。
所以看TreeSet
另外,Integer本身實作了Comparable類型,所有基本類型的封裝物件(還有Long、Double、Boolean等),以及String都,都實作了Comparable,所以當然可以強轉。
最後留一個問題給大家,TreeMap創建時帶Comparator的話,為什麼要指定類型Comparator<? super K>
,而不是Comparator<K>
或Comparator<? extends K>
?參閱TreeMap的一個建構子:
public TreeMap(Comparator super K> comparator);