2022.12.26日学习内容(set集合重写比较器)

1,hashCode在1.7以及1.7之前是数组加链表,在1.8以后还外加了红黑树

2,当用TreeSet添加了多个数据,如果不重写compareTo方法,则会报错,重写compareTo方法需要在javabean对象的class添加一个接口,如下

public class Book implements Comparable<Book>{
    private int price;
    private String name;

重写的规则:先比较书的价格,如果书的价格相同再比较名字是否相同,名字相同则不存入,代码如下,

public int compareTo(Book o) {
    int result = this.price - o.price;
    result = result == 0 ? this.name.compareTo(o.getName()) : result;
    return result;
}

以上这种方法叫做自然排序

或者可以用比较器比较

TreeSet<Book> treeSet = new TreeSet<Book>(new Comparator<Book>() {
    @Override
    public int compare(Book o1, Book o2) {
        return o1.getPrice()-o2.getPrice();
    }
});

直接在方法里重写比较器

3,红黑规则

1. 每一个节点或是红色的,或者是黑色的。
2. 根节点必须是黑色
3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为 Nil ,这些 Nil 视为叶节点,每个叶节点 (Nil) 是黑色的;
4. 如果某一个节点是红色,那么它的子节点必须是黑色 ( 不能出现两个红色节点相连的情况 )
5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值