Java学习之TreeSet的使用

Java学习之TreeSet的使用

基础知识

  • TreeSet内部采用平衡二叉树存储元素,这样的结构保证集合中没有重复的元素并且可以对元素进行排序

  • 对于元素的排序,则必须实现Comparable接口的CompareTo()方法,Java中的大部分的类都实现了Comparable接口,并默认实现了CompareTo()方法

  • 使用TreeSet集合存储数据时,TreeSet会对存入元素进行比较排序,所以为了保证程序正常运行,一定要保证存入的元素是同一种数据类型

  • 在实际开发中,除了向TreeSet集合中存储一些Java默认的类型数据以外,还会存储一些用户自定义的数据类型,这些自定义数据类型吗没有实现Comparable接口,因此无法直接在TreeSet集合中进行排序

  • 为了解决上述问题,Java提供了两种TreeSet的排序规则

    • 自然排序:向TreeSet集合中存储元素的所在类实现Comparable接口并且实现CompareTo方法
    package com.tang.chapter6.collection;
    
    import java.util.TreeSet;
    
    /**
     * @author Tang
     */
    public class Teacher implements Comparable {
        int id;
        String name;
        public Teacher(){};
    
        public Teacher(int id,String name){
            this.id = id;
            this.name = name;
        }
    
        @Override
        public String toString(){
            return id + ":" + name;
        }
    
        @Override
        public int compareTo(Object o) {
        Teacher tc = (Teacher) o;
        if (this.id > tc.id){
            return 1;
        }
        if (this.id == tc.id){
            return this.name.compareTo(tc.name);
        }
        return -1;
        }
        /**
         * 在代码中,首先实现了Comparable接口,其次实现了接口中的CompareTo()方法
         * 在CompareTo()方法中,首先针对id值进行比较,大于返回1,相等继续比较name的值,小于则返回-1
         * 比较的规则是现根据id值进行升序排,然后根据name值的字典序排,同时去除重复的元素
        */
        public static void main(String[] args) {
            TreeSet<String> treeSet = new TreeSet<String>();
            Teacher tc1 = new Teacher(11,"zs");
            Teacher tc2 = new Teacher(11,"ls");
            Teacher tc3 = new Teacher(12,"ls");
            Teacher tc4 = new Teacher(13,"ww");
            Teacher tc5 = new Teacher(11,"zs");
            treeSet.add(tc1.toString());
            treeSet.add(tc2.toString());
            treeSet.add(tc3.toString());
            treeSet.add(tc4.toString());
            treeSet.add(tc5.toString());
            System.out.println(treeSet);
        }
    
    }
    
    • 定制排序:自定义一个比较器进行排序
    package com.tang.chapter6.collection;
    
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.TreeSet;
    
    /**
     * @author Tang
     */
    class  MyCompareTor implements Comparator{
        @Override
        public int compare(Object obj1, Object obj2){
            String s1 = (String)obj1;
            String s2 = (String)obj2;
            return s1.length() - s2.length();
        }
    }
    public class Demo05 {
        public static void main(String[] args) {
            TreeSet<String> ts = new TreeSet<String>();
            ts.add("aaa");
            ts.add("ccc");
            ts.add("ddd");
            ts.add("bbb");
            System.out.println(ts);
        }
    }
    

Demo案例

package com.tang.chapter6.collection;

import java.util.TreeSet;

/**
 * @author Tang
 */
public class Teacher {
    public static void main(String[] args) {
        TreeSet<Integer> treeSet = new TreeSet<Integer>();
        treeSet.add(9);
        treeSet.add(2);
        treeSet.add(78);
        treeSet.add(6);
        System.out.println(treeSet);
        System.out.println(treeSet.size());
        System.out.println(treeSet.first());
        System.out.println(treeSet.last());
        Object obj = treeSet.pollFirst();
        System.out.println(obj);
        System.out.println(treeSet);
    }
}
上一篇:java集合框架


下一篇:自学Java第三十课