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);时进行升序排序

解决方案 »

  1.   

    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
      

  2.   

    TreeSet本来就是带排序的。
    不知道你知道排序算法不? 但不管哪种方法都需要知道,怎么比较大小。
    MyComparator就是你告诉TreeSet是怎么比大小的,知道了怎么比大小TreeSet就可以根据自己的排序算法进行排序了。s1.compareTo(s2) 是s1小返回-1。 那么返过来就正好返回值也反过来,就正好降序了。
      

  3.   

    建议看看java的api,里面写的很清楚
      

  4.   

    但是在这个程序中为何s1.compareTo(s2)就是升序排序,而s2.compareTo(s1)就是降序,反过来不行吗,还有传给arg0和arg1的之如何确定,比如上面这个程序,加进“C”和“A”时是不是arg0就是C而arg1就是A