当前位置: 代码迷 >> J2SE >> java 对象器皿 TreeSet 反序排列
  详细解决方案

java 对象器皿 TreeSet 反序排列

热度:657   发布时间:2016-04-23 19:47:24.0
java 对象容器 TreeSet 反序排列
原始编码(已经正确):
package onlyfun.caterpillar;

import java.util.*;

public class TreeSetDemo{

public static void main(String[]args){
Set<String> set = new TreeSet<String>();
//input
set.add("zhang");
set.add("wen");
set.add("qiang");
set.add("wen");
//output
for(String name:set)
System.out.print(name+" ");

System.out.println();
}
}
//输出结果确实按照字典排序
//由于TreeSet加入的String对象执行时自动按照字典顺序进行排序,所以下面的程序 --实现反序

//作用:设置compare方法改变TreeSet的顺序
package onlyfun.caterpillar;

import java.util.Comparator;

public class CustomComparator<T> implements Comparator<T>{
@SuppressWarnings("unchecked")
public int compare(T o1,T o2){
if( (o1).equals(o2) ) //为什么用T
return 0;
return ((Comparable<T>)o1 ).compareTo((T) o2)*-1;//为什么用(Comparator<T>)o1
}//为什么*-1就可以反序?怎么反序的?
}
//程序
package onlyfun.caterpillar;

import java.util.*;

public class TreeSetDemo2{

public static void main(String[]args){

Comparator<String> comparator = new CustomComparator<String>();
Set<String> set = new TreeSet<String>(comparator);//怎么连接在一起的?看不懂a
//input
set.add("zhang");
set.add("wen");
set.add("qiang");
set.add("wen");

//output
for(String name:set)
System.out.print(name+" ");

System.out.println();
}
}
------解决思路----------------------
a  compare  b  结果为0表示相等,-1表示a<b,1表示a>b
正常ThreeSet会判断-1的放前面,1的放后面,这样就是升序排序了
把compare的结果乘以-1,排序的时候就降序了
  相关解决方案