TreeSet

注意事项:

1、往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么久按照元素的自然顺序特性进行排序。

2、往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,吧元素的比较规则定义在compareTo()方法上。

3、如果比较元素的时候,compareTo方法的返回值是0,那么改元素就被视为重复元素,不允许添加。

4、往TreeSet添加元素的时候,如果元素本身不具备自然顺序属性,并且元素所属的类也没有实现comparable接口,那么必须要在创建TreeSet对象的时候传入一个比较器。(如何创建比较器?)

底层实现:红黑树(二叉树)的数据结构。  规则:左小右大。

    二叉树如果连续三个节点没有形成二叉树,则就会自动调整节点。

2、不具备自然排序属性,改元素所属的类必须实现comparable接口:例子:

package cd.itcast.runble;

import java.util.TreeSet;

/**
 * TreeSet自定义对象按某属性排序(实现Comparable接口)
 * @author 甘兴瑞
 *2016/11/9
 */
class Emp implements Comparable{
    int id;
    String name;
    int salary;
    public Emp(int id, String name, int salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
    @Override
    public int compareTo(Object o) {
        Emp emp = (Emp)o;
        //按薪水排序
        return this.salary-emp.salary;
    }
    @Override
    public String toString() {
        return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}";
    }
}

public class Demo4 {
    public static void main(String[] args) {
        TreeSet  treeSet = new TreeSet();
        treeSet.add(new Emp(110, "张三", 5000));
        treeSet.add(new Emp(113, "李四", 6000));
        treeSet.add(new Emp(115, "王五", 4000));
        treeSet.add(new Emp(119, "老六", 5500));
        
        System.out.println(treeSet);
//[{工号:115,姓名:王五,薪水4000}, {工号:110,姓名:张三,薪水5000}, {工号:119,姓名:老六,薪水5500}, {工号:113,姓名:李四,薪水6000}] } }

3、定义比较器,实现。例子:

package cd.itcast.runble;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * TreeSet自定义对象按某属性排序(实现Comparable接口)
 * @author 甘兴瑞
 *2016/11/9
 */
class Emp {
    int id;
    String name;
    int salary;
    public Emp(int id, String name, int salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
//    @Override
//    public int compareTo(Object o) {
//        Emp emp = (Emp)o;
//        //按薪水排序
//        return this.salary-emp.salary;
//    }
    @Override
    public String toString() {
        return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}";
    }
}
//自定义比较器,在创建treeset的时候传入;
class MyCompare implements Comparator{ @Override public int compare(Object o1, Object o2) { Emp e1 = (Emp)o1; Emp e2 = (Emp)o2; return e1.salary-e2.salary; } } public class Demo4 { public static void main(String[] args) { MyCompare myCompare = new MyCompare(); TreeSet treeSet = new TreeSet(myCompare); treeSet.add(new Emp(110, "张三", 5000)); treeSet.add(new Emp(113, "李四", 6000)); treeSet.add(new Emp(115, "王五", 4000)); treeSet.add(new Emp(119, "老六", 5500)); System.out.println(treeSet); } }
原文地址:https://www.cnblogs.com/h-g-f-s123/p/6047586.html