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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zms2100 高级黑马   /  2013-5-5 16:41  /  2047 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,我之前听说ArrayList用的比TreeSet会多些(接触Collections后相信了,O(∩_∩)O~)。
疑惑是: 一个TreeSet集合如何调用多个比较器?
ArrayList可以通过多次调用Collections.sort( )实现不同的排序功能,但TreeSet的排序是在new TreeSet对象的时候就指定了,好像不好改。(下面只是之前错误了的思路,可忽略)
之前我想过定个无比较器的TreeSet,然后把它赋值给其他TreeSet集合(至少实现数据共享),但是...(没但是,怎么加,不可能吧,O(∩_∩)O~);
还想了定个参数(该参数定义在TreeSet存储比较器的位置),然后通过赋值给参数,改变TreeSet的比较器,不过编译不通过。
这可能类似反射吧,暂时没学到反射(稍微懂原理,但不知道代码怎么写),也不知道是不是自己定义参数时有问题所以没成功。
最后希望大神们帮忙指教下,谢谢,说说能不能实现,大概怎么实现,O(∩_∩)O谢谢。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
自顶下............感谢昆哥给加分,O(∩_∩)O~,谢谢,不过为啥变成已解决啦,期待大神来解决,感谢.........
回复 使用道具 举报
这个问题。也太奇怪了。多个比较器。是什么意思。 比较多次? 一个类如有多个属性,实现 comparable 接口时,
在实现的方法里面 多次 比较 该 对象的 属性值即可;
回复 使用道具 举报
ZhaoYuBetter 发表于 2013-5-6 23:38
这个问题。也太奇怪了。多个比较器。是什么意思。 比较多次? 一个类如有多个属性,实现 comparable 接口时 ...

意思是: 一个类有多个不同属性(姓名、年龄、成绩、生源地等),用TreeSet存储该类对象时只能使用默认自然排序或者指定一个比较器来实现排序;
但是(也就是问题)同一个TreeSet集合只能对该类进行一种排序(例如创建TreeSet集合时指定了成绩比较器),然后要怎么实现同一个的TreeSet集合根据其他属性来排序(例如还有姓名比较器、年龄比较器);
疑惑,也算解决不了的就是怎么用其他比较器让已经有比较器的TreeSet集合重新进行排序。
(ArrayList等List集合就可以通过Collections.sort()方法轻松实现),感谢你的回复,原来是我的提问没让人看懂。
回复 使用道具 举报
可以这样啊。Collections.sort();  // 使用2个参数的那个。感觉这个没有必要!
回复 使用道具 举报
ZhaoYuBetter 发表于 2013-5-6 23:58
可以这样啊。Collections.sort();  // 使用2个参数的那个。感觉这个没有必要!

这个排序方法Collections.sort只能用于List集合,TreeSet是不能用的,所以我才纠结。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马