java - TreeSet的自然排序问题,也与多态有关
高洛峰
高洛峰 2017-04-18 10:51:00
0
2
564

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
黄舟

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

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

  2. 創建時不帶Comparator super T>,那麼要求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 super K> comparator);

迷茫
  1. 正確

  2. 因為 class Integer implements Comparable<Integer>

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板