TestTreeSet类中的代码:
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TestTreeSet {
public static void main(String[] args) {
// 创建一个LinkedHashSet集合对象
Set
ts = new TreeSet
(); // 生成一些Student对象 Student sd1 = new Student(18, "zxx"); Student sd2 = new Student(23, "abc"); Student sd3 = new Student(25, "hik"); Student sd4 = new Student(25, "hik"); Student sd5 = new Student(17, "cde"); // 向集合对象中添加Student对象 lhs.add(sd4); ts.add(sd2); ts.add(sd5); ts.add(sd3); ts.add(sd1); // 生成一个迭代器 Iterator
it = ts.iterator(); // 输出字符串 while (it.hasNext()) { System.out.println(it.next()); } } }
输出结果:
age :17 name :cde
age :18 name :zxx
age :23 name :abc
age :25 name :hik
很明显TreeSet中的Student类按age由小到大的顺序排序。
使用Comparable接口可以完成TreeSet的排序,但使用Comparable接口定义排序具有局限性,实现此接口的类只能按CompareTo()定义
的这一种方法排序。如果同一类对象要有多种排序方式,应该为该类定义不同的比较器。
定义比较器实际上就是让自编写的类实现Comparator接口,重写Comparator接口中的比较方法compare(Object a,Object b)。
排序Student集合类例子:
Student中的代码:
public class Student {
// 创建属性
private Integer age;
private String name;
private Integer score;
// 包含参数的构造函数
public Student(Integer age, String name, Integer score) {
this.age = age;
this.name = name;
this.score = score;
}
// 重写toString方法
public String toString() {
return "name :" + name + " age :" + age + " score :" + score;
}
// 生成属性的get和set方法
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
// 重写HashCode方法
public int hashCode() {
return age * score * name.hashCode();
}
// 重写equals方法
public boolean equals(Object obj) {
Student s = (Student) obj;
return age == s.age && name.equals(s.name)
&& score == s.score;
}
}
TestTreeSet类中的代码:
import java.util.Comparator; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; //学生年龄比较器 class StudentAgeComparator implements Comparator{ public int compare(Student o1, Student o2) { int i = o1.getAge() - o2.getAge(); return i; } } // 学生成绩比较器 class StudentScoreComparator implements Comparator { public int compare(Student o1, Student o2) { int i = o1.getScore() - o2.getScore(); return i; } } public class TestTreeSet {