Java教程

4.30Java TreeSet的使用和底层实现

本文主要是介绍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);
        }
    }
}

 

 

这篇关于4.30Java TreeSet的使用和底层实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!