基础概念
TreeSet底层实际是用TreeMap实现的,内部维持了一个简化版的TreeMap。通过key来存储Set的元素。TreeSet内部需要对存储的元素进行自动排序,因此,我们对应的类需要实现Comparable接口,这样才能更具comparaTo()方法比较对象之间的大小,才能进行内部排序。
测试代码
代码
import java.util.Set;
import java.util.TreeSet;
/**
* 测试TreeSet
* @author dxt
*
*/
public class TestTreeSet {
public static void main(String[] args){
//建立一个TreeSet容器
TreeSet<Integer> set = new TreeSet<Integer>();
set.add(100);
set.add(200);
set.add(150);
System.out.println(set);
Set<Emp> set2 = new TreeSet<Emp>();
set2.add(new Emp(101, "aa", 200));
set2.add(new Emp(201, "bb", 100));
set2.add(new Emp(102, "AA", 200));
System.out.println(set2);
}
}
/**
* 实现Comparable接口
* @author dxt
*
*/
class Emp implements Comparable<Emp>{
private int id;
private String name;
private double salary;
public Emp(int id, String name, double salary){
super();
this.id = id;
this.name = name;
this.salary = salary;
}
/**
* 重写compareTo方法
* 负数: 小于; 0:等于;正数:大于
*/
public int compareTo(Emp o){
//先以工资排序,如果工资相同再比较id
if(this.salary > o.salary){
return 1;
}else if(this.salary < o.salary){
return -1;
}else{
if(this.id > o.id){
return 1;
}else if(this.id < o.id){
return -1;
}else{
return 0;
}
}
}
/**
* 重写toString()
*/
public String toString(){
return "id:"+id+" name:"+name+" salary:"+salary;
}
}
结果