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!!!
  • 相关阅读:
    武汉科技大学ACM :1004: 零起点学算法74——Palindromes _easy version
    武汉科技大学ACM :1003: 零起点学算法14——三位数反转
    武汉科技大学ACM :1002: 零起点学算法38——求阶乘和
    武汉科技大学ACM :1001: 零起点学算法34——继续求多项式
    cos实现文件上传--推荐
    文件夹分级保存文件
    apache_fileupload实现文件上传_上传多个文件
    UEFI模式下安装Win 7系统
    武汉科技大学ACM :1008: A+B for Input-Output Practice (VIII)
    武汉科技大学ACM :1007: A+B for Input-Output Practice (VII)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14723387.html
Copyright © 2011-2022 走看看