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

高洛峰
高洛峰

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

全部回复(2)
黄舟

截图红字的理解基本没错但不完全,正如 @jokester 说的,你没把代码贴全,注意第561行 else 前面的部分。实际上,TreeMap<T>或TreeSet<T>,排序依据有两种情况:

  1. 创建时带了Comparator<? super T>,那么排序依据这个Comparator;

  2. 创建时不带Comparator<? super T>,那么要求T必须实现Comparable。

所以看TreeSet<Person>的情况,如果创建时带了Comparator<Person>,那么Person完全可以不实现Comparable。

另外,Integer本身实现了Comparable类型,所有基本类型的封装对象(还有Long、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>

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!