TreeSet

TreeSet

TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,保证元素的唯一。
那TreeSet为什么能保证元素唯一?
如何指定比较的规则,需要在自定义类中实现Comparable接口,并重写接口中的compareTo()方法

public class Person implements Comparable {
    private String name;
    private int age;
 
    public int compareTo(Object o) {
        return 0;      //当compareTo方法返回 0  的时候集合中 只有一个元素
        return 1;      //当compareTo方法返回 正数 的时候集合会 怎么存就怎么取
        return -1;     //当compareTo方法返回 负数 的时候集合会 倒序存储
    }
}

存取有序,存储的元素不能重复,让元素所在的类实现Comparable接口,并重写CompareTo() 方法,并根据CompareTo()的返回值来进行添加元素

  1. 返回正数:往二叉树的右边添加
    如果compareTo()返回值为正数,元素值每次比较,都认为新插入的元素比上一个元素大,于是二叉树存储时,会存在根的右侧,读取时就是升序排列的。
  2. 返回负数:往二叉树的左边添加
    如果compareTo()返回为负数,元素值每次比较,都认为新插入的元素比上一个元素小,于是二叉树存储时,会存在根的左侧,读取时就是降序排列的。
  3. 返回 0 : 说明重复,不添加
    如果compareTo()返回值为0,元素值每次比较,都认为是相同的元素,这时就不再向TreeSet中插入除第一个外的新元素。所以TreeSet中就只存在插入的第一个元素。

总结

  1. 自然顺序(Comparable)
    TreeSet类的add()方法中会把存入的对象提升为Comparable类型
    调用对象的compareTo()方法和集合中的对象比较
    根据compareTo()方法返回的结果进行存储
  2. 比较器顺序(Comparator)
    创建TreeSet的时候可以制定 一个Comparator
    如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
    add()方法内部会自动调用Comparator接口中compare()方法排序
    调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
  3. 两种方式的区别
    TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
    TreeSet如果传入Comparator, 就优先按照Comparator

参考:https://blog.csdn.net/weixin_42697074/article/details/88917796

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值