TreeSet
TreeSet是SortedSet接口的实现方法,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方法:自然排序和定制排序。其中自然排序是默认的,定制排序用于自定义的类的按照某种规则的排序(需要重写排序方法)。
自然排序
排序方法调用compareTo()方法:
方法简述为
compare(Object obj){
if(this>obj)
return 1;
else if(this=obj)
return 0;
else //this < obj
return -1;
}
注意:在用默认的自然排序,集合内必须放入同类型的对象,否则会发生类型转化错误。(可以用泛型规定集合内元素的类型)
例如:
Set<Integer> set = new TreeSet<Integer>();
set.add(5);
set.add(3);
set.add(1);
set.add(4);
set.add(2);
for(Integer i : set) {
System.out.println(i);
输出:1 2 3 4 5
定制排序
例如,定义一个类为Person,其中包含name(String),age(int),排序方法按照年龄(age)的从小到大进行排序。
class Person implements Comparator<Person>{
String name;
int age;
//无参构造,用于初始化和导入基准
public Person() {
name = "null";
age = -1;
}
//含参构造,用于定义对象的属性
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override // 重写的compare排序准则
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
if(o1.age > o2.age)
return 1 ;
else if(o1.age == o2.age)
return 0;
else
return -1;
}
}
接下来分别定义 p1,p2,p3,p4四位不同年龄(15,18,16,19)的对象,并导入TreeSet集合进行排序测试。
Person p1 = new Person("p1",15);
Person p2 = new Person("p2",18);
Person p3 = new Person("p3",16);
Person p4 = new Person("p2",19);
Set<Person> set = new TreeSet<Person>(new Person());
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
for(Person p : set) {
System.out.println("name:" + p.name +" age:"+p.age);
}
结果输出:
name:p1 age:15
name:p3 age:16
name:p2 age:18
name:p2 age:19
说明:Set set = new TreeSet(new Person());
new Person()是为调用无参构造产生一个最开始的基准。