java中TreeSet类集合的一个排序问题

zkp_java 2012-08-20 01:30:52
package com.shengsiyuan2;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest3
{
public static void main(String[] args)
{
TreeSet set = new TreeSet(new MyComparator());

set.add("C");
set.add("A");
set.add("B");
set.add("E");
set.add("a");
set.add("F");
set.add("D");

for(Iterator iter = set.iterator(); iter.hasNext();)
{
String value = (String)iter.next();

System.out.println(value);

}

}
}


class MyComparator implements Comparator
{
public int compare(Object arg0, Object arg1)
{
String s1 = (String)arg0;
String s2 = (String)arg1;

return s2.compareTo(s1);
}
}
程序如上所示,是将set集合中的元素按照自定义规则进行排序,compare方法和return s2.compareTo(s1);语句
只是将s1和s2进行了比较,并没有进行排序,但为和输出结果却是已经排序过的结果,还有为何s2.compareTo(s1);是进行
降序排序,而s1.compareTo(s2);时进行升序排序














...全文
317 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkp_java 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

TreeSet本来就是带排序的。
不知道你知道排序算法不? 但不管哪种方法都需要知道,怎么比较大小。
MyComparator就是你告诉TreeSet是怎么比大小的,知道了怎么比大小TreeSet就可以根据自己的排序算法进行排序了。

s1.compareTo(s2) 是s1小返回-1。 那么返过来就正好返回值也反过来,就正好降序了。
[/Quote]
但是在这个程序中为何s1.compareTo(s2)就是升序排序,而s2.compareTo(s1)就是降序,反过来不行吗,还有传给arg0和arg1的之如何确定,比如上面这个程序,加进“C”和“A”时是不是arg0就是C而arg1就是A

这个用户很懒 2012-08-20
  • 打赏
  • 举报
回复
建议看看java的api,里面写的很清楚
scbb 2012-08-20
  • 打赏
  • 举报
回复
TreeSet本来就是带排序的。
不知道你知道排序算法不? 但不管哪种方法都需要知道,怎么比较大小。
MyComparator就是你告诉TreeSet是怎么比大小的,知道了怎么比大小TreeSet就可以根据自己的排序算法进行排序了。

s1.compareTo(s2) 是s1小返回-1。 那么返过来就正好返回值也反过来,就正好降序了。
这个用户很懒 2012-08-20
  • 打赏
  • 举报
回复
TreeSet是一个默认的排序集合,楼主自己实现了一个比较器构造了这个集合,那么这个TreeSet就会根据比较器的比较顺序排序。至于升序和降序的问题:s2.compareTo(s1) 的结果与s1.compareTo(s2)的结果是相反的。
类似这样:

Integer a = 1;
Integer b = 2;
System.out.println(a.compareTo(b));//输出-1
System.out.println(b.compareTo(a));//输出1

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧