4.30Java TreeSet的使用和底层实现
TreeSet的概念
底层用TreeMap实现,通过key来存储Set的元素
特点:
-
TreeSet内部需要对存储的元素进行排序,对应类需要实现Comparable接口
-
根据compareTo()方法比较对象的大小,进行内部排序
-
要排序需要实现comparable接口,实现comparable接口必须重写里面的compareTo方法
定义一个Employee类:
package collection.set;
/*
因为key可以是任意对象,treemap是递增的方式排序
如果key的值为类会如何排序?
新的接口---comparable
*/
/*定义一个新的类*/
public class Employee implements Comparable<Employee>{
//定义它的属性
int id;
String name;
double salary;
/*以Employee为key,按照salary排序--->需要实现comparable接口*/
/*构造器*/
public Employee(int id, String name, double salary){
super();
this.id = id;
this.name = name;
this.salary = salary;
}
/*重写toString方法*/
@Override
public String toString(){
return "id:" + id + ",name:" + name + ",salary:" + salary;
}
/*实现接口当中未实现的方法*/
@Override
public int compareTo(Employee o){
//TODO Auto-generated method stub
//负数 : 小于, 0 : 等于, 正数 : 大于--->1 -1 0代替
//比较salary
if (salary > o.salary){
//返回值
return 1;
}else if (salary < o.salary){
return -1;
}else {
//如果工资相等利用id排序
if (this.id > o.id){
return 1;
}else if (this.id < o.id){
return -1;
}else {
return 0; //相等
}
}
}
}
Test类:
import java.util.TreeSet;
/**
* 测试TreeSet的使用
* @author Lucifer
*/
public class TestTreeSet {
public static void main(String[] args) {
//建一个Set对象
Set<Integer> set = new TreeSet<>();
set.add(300);
set.add(200);
set.add(600);
//利用增强for循环进行遍历
for (Integer m : set){
//遍历集合里面的所有元素然后打印出来
System.out.println(m);
}
/*在创建一个Employee对象*/
Set<Employee> set2 = new TreeSet<>();
set2.add(new Employee(100,"Lucifer",20000));
set2.add(new Employee(50,"Harden",15000));
set2.add(new Employee(150,"James",10000));
/*循环添加内容*/
for (Employee m : set2){
//打印出结果
System.out.println(m);
}
}
}