底层用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); } } }