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!!!
  • 相关阅读:
    public、private、protected继承的规则
    派生类对象的构造函数与析构函数
    类的保护成员
    派生类覆盖(修改)基类成员
    条款03:尽可能使用const
    处理类与类之间的关系
    继承派生基本概念
    条款02:尽量以const,enum,inline替换#define(宁可编译器替代预处理器)
    Redis持久化AOF和RDB对比
    Memcached取模算法
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14723387.html
Copyright © 2011-2022 走看看