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

发布于 2022-09-04 15:59:38 字数 126 浏览 20 评论 0

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑕疵 2022-09-11 15:59:38

截图红字的理解基本没错但不完全,正如 @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);

这个俗人 2022-09-11 15:59:38
  1. 正確

  2. 因爲 class Integer implements Comparable<Integer>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文