版权声明: https://blog.csdn.net/weixin_40072979/article/details/82967615
TreeSet 底层实际是 TreeMap 实现的,内部维持了一个简化版的 TreeMap,通过 key 来存储 Set 的元素。 TreeSet 内部需要对存储的元素进行排序,因此,我们对应的类需要四线 Comparable 接口。这样才能根据 compareTo() 方法比较对象之间的大小,才能进行内部排序 (TreeMap 对key进行升序排列)
package com.jianshun;
import java.util.Set;
import java.util.TreeSet;
/**
* 测试TreeSet
* 熟悉Comparable接口(参考TreeMap)
* @author Administrator
*
*/
public class TestTreeSet {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
set.add(300);
set.add(200);
set.add(600);
for(Integer m : set){
System.out.println(m);
}
Set<Emp2> set2 = new TreeSet<Emp2>();
set2.add(new Emp2(100,"张三",3000));
set2.add(new Emp2(50,"李四",2000));
set2.add(new Emp2(150,"王五",8000));
set2.add(new Emp2(30,"赵六",20000));
for(Emp2 m : set2){
System.out.println(m);
}
}
}
//当key是一个自定义对象时;
class Emp2 implements Comparable<Emp2>{
int id;
String name;
double salary;
public Emp2(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public int compareTo(Emp2 o) {//负数:小于,0:等于,整数:大于
if(this.salary > o.salary){
return 1;
}else if(this.salary < o.salary){
return -1;
}else{// salary相等在比较id
if(this.id > o.id){
return 1;
}else if(this.id < o.id){
return -1;
}else{
return 0;
}
}
}
@Override
public String toString() {
return "Emp2 [id=" + id + ", name=" + name + ", salary=" + salary + "]";
}
}
运行结果:
200
300
600
Emp2 [id=50, name=李四, salary=2000.0]
Emp2 [id=100, name=张三, salary=3000.0]
Emp2 [id=150, name=王五, salary=8000.0]
Emp2 [id=30, name=赵六, salary=20000.0]