在Java编程中有时会用到TreeSet这个类,这个类会对里面的key进行自动的排序。一般是进行自然序列排序,但是自然序列排序,一般都没什么用。我们大多数情况下需要它按照我们自己要求的方式进行排序。下面这个例子就是把一个类的引用放到TreeSet中,然后按照类中一个成员变量的大小进行排序。
package com.java;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest
{
public static void main(String[] args)
{
Student stu1 = new Student(6, "zhao");
Student stu2 = new Student(69, "qian");
Student stu3 = new Student(644, "sun");
Student stu4 = new Student(68, "li");
Student stu5 = new Student(45, "zhou");
Student stu6 = new Student(5, "wu");
TreeSet<Student> tSet = new TreeSet<Student>(new MyComparator());
tSet.add(stu1);
tSet.add(stu2);
tSet.add(stu3);
tSet.add(stu4);
tSet.add(stu5);
tSet.add(stu6);
for(Iterator<Student> iter = tSet.iterator();iter.hasNext();)
{
System.out.println(iter.next());
}
}
}
class Student
{
private int score;
private String name;
Student(int a, String str)
{
this.score = a;
this.name = str;
}
int Score()
{
return score;
}
@Override
public String toString()
{
return this.name + " " + String.valueOf(this.score);
}
}
class MyComparator implements Comparator<Object>
{
@Override
public int compare(Object o1, Object o2)
{
Student s1 = (Student) o1;
Student s2 = (Student) o2;
if (s1.Score() > s2.Score())
return 1;
else if (s1.Score() == s2.Score())
return 0;
else
return -1;
}
}
运行结果如下:
wu 5
zhao 6
zhou 45
li 68
qian 69
sun 644
同理,也可以写出关于TreeMap的自定义排序