欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TreeSet

程序员文章站 2022-05-14 13:08:24
...

TreeSet

TreeSet 集合继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。
TreeSet基于TreeMap实现的。TreeSet中含有一个”NavigableMap类型的成员变量”m,而m实际上是”TreeMap的实例”。
底层的数据结构是红黑树(平衡二叉树)

能够对元素按照某种规则进行排序。同时也保证元素的唯一。
两种排序方式:
自然排序
比较器排序
使用元素的自然排序对元素进行排序,还是根据创建集合时提供的Comparator比较器进行排序,这取决于使用的构造方法

TreeSet集合特点:排序唯一

TreeSet存储Integer类型的元素并遍历

背景:自然排序
要知道Integer类本身已实现了Comparable接口,重写了compare()方法。

import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args){
        TreeSet<Integer> ts= new TreeSet<Integer>();//这里是自然排序

        ts.add(10);//会自动装箱
        ts.add(12);
        ts.add(88);
        ts.add(32);
        ts.add(10);
        ts.add(8);
        ts.add(100);
        ts.add(10);

        for(Integer number: ts){
            System.out.println(number); //输出结果: 8 10 12 32 88 100
        }

    }

TreeSet ts= new TreeSet();//看构造方法,示例中采取的是自然排序。

真正比较的是依赖元素的compareTo()方法,而这个方法是定义在Comparable里面的。所以,你要想重写此方法。就必须是先实现Comparable接口。本例中Integer类本身已实现了Comparable接口,重写了compare()方法。
Comparable接口:此接口强行对实现它的每个类的对象进行整体排序,这个排序称为自然排序
Comparable接口的方法:int compareTo(T o) 将此对象与指定的对象进行比较以进行排序。 参数 o - 要比较的对象。结果
负整数,零或正整数,因为该对象小于,等于或大于指定对象。

此时,元素是如何存储进去的?

要知道,TreeSet集合底层数据结构是红黑树(平衡二叉树)。
第一个元素存储的时候,直接作为根节点。
从第二个开始,每个元素从根节点开始比较:
大——就作为右孩子
小——就作为左孩子
相等——不搭理它

TreeSet存储自定义类型的元素并遍历

需要自定义类型(如Student类)去实现Comparable接口,重写compareTo()方法。
根据需求(如,要自然排序,按照学生的年龄从小到大排序),去重写compareTo()方法。

class Student implements Comparable<T>{
    //重写compareTo()方法
    ....
}

两种排序

自然排序:让元素所属的类中实现自然排序接口Comparerable接口 。可以在自定义类中实现Comparerable接口,重写compareTo()方法。
比较器排序:让集合的构造方法接收一个比较器Comparator接口的子类对象。可以在自定义类中实现Comparetor接口,重写compare()方法。

TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
如:TreeSet<Integer> ts= new TreeSet<Integer>();//这里表明是自然排序
TreeSet如果传入Comparator, 就优先按照Comparator
如:TreeSet<Integer> ts= new TreeSet<Integer>(new MyComparator());//这里是比较器排序。在创建集合时让集合的构造方法接收一个比较器接口的子类对象MyComparator
单独创建一个MyComparator类不是特别好,可以将MyComparetor的内容直接写到主类中。开发中常用匿名内部类实现。

相关标签: TreeSet