zoukankan      html  css  js  c++  java
  • 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);
          }
      }
    }

     

     

    It's a lonely road!!!
  • 相关阅读:
    ScreenToGif 使用教程
    无问西东
    php如何解决中文乱码问题?
    layer父页面调用子页面的方法
    弹层组件文档
    关于svn获取获取文件时 Unable to connect to a repository at URL"https://..."执行上下文错误:参数错误
    centos下修改文件后如何保存退出
    Linux CentOS 7的图形界面安装(GNOME、KDE等)
    CentOS7安装详解
    Could not attach to pid : "xx"最近启动Xcode运行项目都会出现这个问题,再次启动或者多启动几次,就可以正常运行工程了。
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14723387.html
Copyright © 2011-2022 走看看