A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一碗小米周 中级黑马   /  2013-10-29 15:58  /  706 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一碗小米周 于 2013-10-29 22:29 编辑

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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

4 个回复

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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

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