zoukankan      html  css  js  c++  java
  • java 集合(Set2)

    TreeSet:

    1.向TreeSet添加元素时

       如果元素具有自然特性,那么就按照元素的自然顺序的特点进行排序储存。

       如果不具备,就要实现Compareable接口中的compareTo() 方法。

       可以直接实现Compareable接口,但最好自己定义比较器类。

    2.TreeSet的底层实现是红黑树,也叫二叉树,集合中的元素一个个进行比较时

       当把拿出来的第一个元素当成树根,依次拿其它元素进行比较如果大于树根

       就放在其右支,小于则放在其左支,如此迭代,直到所有元素被比较完,安放完。

     注意:在二叉树中出现3个元素,还未形成二叉结构时,就要重新排列,就是把

              根和支的位置改变了。

       

    (1, 2,3,4)   (a,  b,  c, d )自然顺序

    import java.util.*;
    import java.util.ListIterator;
    public class ex12 {
        public static void main(String[] args) {
    
            TreeSet set = new TreeSet();
            set.add(new Emp(100, "Tom", 100));
            set.add(new Emp(101, "Tom", 400));
            set.add(new Emp(109, "Tom", 100));//Ctrl + d
            set.add(new Emp(109, "Tom", 99));//Ctrl + d
            set.add(new Emp(209, "Tom", 130));//Ctrl + d
            System.out.println(set);
    
        }
    }
    
    class Emp implements Comparable{
        int id;
        String name;
        int money;
    
        public Emp(int id, String name, int money) {
            this.id = id;
            this.name = name;
            this.money = money;
        }
    
        @Override
        public String toString() {
            return "{ id = " + this.id +  " ,name = " + this.name + " ,money = " + money + " }";
        }
    
        @Override//Ctrl + O
        public int compareTo(Object o) {
         Emp e = (Emp)o;
            return this.money - e.money ;
        }
    }
    [{ id = 109 ,name = Tom ,money = 99 }, { id = 100 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }, { id = 101 ,name = Tom ,money = 400 }]
    
    Process finished with exit code 0
    import java.util.*;
    import java.util.ListIterator;
    public class ex12 {
        public static void main(String[] args) {
            
            MyCompare my = new MyCompare();
            TreeSet set = new TreeSet(my);//创建构造器时传入构造器***********
            set.add(new Emp(100, "Tom", 100));
            set.add(new Emp(101, "Tom", 400));
            set.add(new Emp(109, "Tom", 100));//Ctrl + d
            set.add(new Emp(109, "Tom", 99));
            set.add(new Emp(209, "Tom", 130));
            System.out.println(set);
    
        }
    }
    
    class Emp {
        int id;
        String name;
        int money;
    
        public Emp(int id, String name, int money) {
            this.id = id;
            this.name = name;
            this.money = money;
        }
    
        @Override
        public String toString() {
            return "{ id = " + this.id +  " ,name = " + this.name + " ,money = " + money + " }";
        }
    }
    
    //自定义构造器
    class MyCompare implements Comparator<Emp> {
        @Override
        public int compare(Emp o1, Emp o2) {
            return o1.id - o2.id;
        }
    }
    //按id排序
    [{ id = 100 ,name = Tom ,money = 100 }, { id = 101 ,name = Tom ,money = 400 }, { id = 109 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }]
    
    Process finished with exit code 0
  • 相关阅读:
    Linux scp、ssh命令
    Linux ps、top、free、uname命令
    适配器模式
    Linux不能进入图形化界面运行yum不管用
    SpringMVC 测试 mockMVC
    Idea和Git集成,并且Git管理不同的秘钥,idea分别提交项目到GitLab和GitHub
    多线程
    Java中Volatile关键字详解
    Spring事务管理--(二)嵌套事物详解
    jConsole, jVisualvm, btrace 区别和联系
  • 原文地址:https://www.cnblogs.com/lifehrx/p/5797819.html
Copyright © 2011-2022 走看看