4.30Java TreeSet的使用和底层实现

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);
      }
  }
}

 

 

posted @ 2021-04-30 21:22  俊king  阅读(126)  评论(0编辑  收藏  举报