黑马程序员技术交流社区
标题:
TreeSet两种排序方式
[打印本页]
作者:
王训印
时间:
2015-7-29 08:07
标题:
TreeSet两种排序方式
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法。
示例:
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
//创建了一个根据Person类的name进行排序的比较器。
class ComparatorByName implements Comparator{
public int compare(Object o1,Object o2){
Person p1 = (Person)o1;
Person p2 = (Person)o2;
int temp = p1.getName().compareTo(p2.getName());
return temp == 0?p1.getAge()-p2.getAge() : temp;
}
}
public class TreeSetDemo{
public static void main(String[] args){
TreeSet ts = new TreeSet(new ComparatorByName());
//以Person对象年龄进行从小到大的排序
ts.add( new Person("zhangsan" ,28));
ts.add( new Person("wangwu" ,23));
ts.add( new Person("lisi" ,21));
ts.add( new Person("zhouqi" ,29));
ts.add( new Person("zhaoliu" ,25));
Iterator it = ts.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName() + ":" + p.getAge());
}
}
}
复制代码
TreeSet集合第二种排序方式:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数。
示例2:
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest{
public static void main(String[] args){
TreeSet ts = new TreeSet(new ComparatorByLen());
ts.add( "aaaa");
ts.add( "zz");
ts.add( "nbag");
ts.add( "cba");
ts.add( "abc");
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class ComparatorByLen implements Comparator{
public int compare(Object o1,Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
int temp = s1.length() - s2.length();
return temp == 0?s1.compareTo(s2):temp;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2