黑马程序员技术交流社区

标题: 关于comparable和comparator问题。 [打印本页]

作者: 一碗小米周    时间: 2013-10-29 15:58
标题: 关于comparable和comparator问题。
本帖最后由 一碗小米周 于 2013-10-29 22:29 编辑

我想请问下各位,在treeset集合中,如果集合自身具有了比较器,而集合中的对象也实现了comparable接口,具有了比较性,那么这个程序中,到底是参考哪个呢?谢谢。

作者: 雨过丶天已晴    时间: 2013-10-29 18:31
这是根据Comparator的比较器的
帮助文档是这样写的:构造一个新的空 TreeSet,它根据指定比较器进行排序。
其实楼主也可以这样想,任何一个插入TreeSet集合的对象都必须实现Comparable接口,假设不是根据Comparator排序,而是根据Comparable排序
那单独给出一个Comparator的构造函数就没有什么意义了。所以,假设是不成立的,

作者: 阿里策    时间: 2013-10-29 19:31
    这个首先要看你创建TreeSet集合对象时使用的是哪个构造函数了,如果使用 new TreeSet();空参数构造函数,将会按照实现的comparable接口中的方法compareTo进行排序。如果使用new TreeSet(Comparator<? super E> comparator);含有比较器参数的构造函数,那么将会优先使用比较器进行排序。也就是说,当二者都有时,将会按照比较器排序。看帮助文档:
TreeSet()
          构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
TreeSet(Comparator<? super E> comparator)
          构造一个新的空 TreeSet,它根据指定比较器进行排序。
作者: 一碗小米周    时间: 2013-10-29 22:29
恩。刚突然看到了笔记。两种方式都存在时,一比较器为主。
作者: To    时间: 2013-10-30 00:08
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2