zoukankan      html  css  js  c++  java
  • 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); } }
  • 相关阅读:
    favourite programming quotes
    a fast algorithm to compute the area of a polygon
    customize your own memory allocator (2)
    一道概率算法
    study on source code of Tcmalloc
    智力题2
    how does malloc/free work?
    Windows PowerShell系列课程(视频课程讲师:李大川)
    跟我一起学Visual Studio 2008系列课程(视频课程讲师:徐长龙)
    C# 3.0 锐利体验系列课程(视频课程讲师:李建忠)
  • 原文地址:https://www.cnblogs.com/h-g-f-s123/p/6047586.html
Copyright © 2011-2022 走看看