java hash set作用_Java集合Set及HashSet以及TreeSet

1.set子接口

特点“无下标、无序、不可重复。

2.实现set

set是一个接口 所以不能使用new Set

new的时候需要使用到set的两个实现类 hashSet、TreeSet

0e695cb391e95e47a96a24701bf9392d.png

3.HashSet存储原理:

利用Object类里面的hashcode方法计算hash值。

如果hash值相等的话,在进行equals方法的调用,如果返回为true则不给予存入。

(比如说你有一个celebrity类 就可以重写equals方法。比如存入两个  刘德华,20岁  看成一个人 不允许存入2个)

(同时呢 我们根据存储步骤 先hashCode 再equals 。也可以重写hashCode方法)

底层是哈希表(拉链法,也就是数组+链表)

a5c788435ec9a240ca71a5bea6e7ecfa.png

4.为什么要重写HashCode() equals()方法

5.TreeSet

基于红黑树实现

如果要使用自定义的类 必须时间comparable接口(因为是有序的 所以必须能相互比较)

(1)comparable接口是一个函数式接口 必须实现里面的compareTo方法(返回值为0 证明是重复元素)

(2)或者在声明treeSet时,显式定义比较器Comparator

60daf2448e441e357e3c31ec7f58e4fd.png

默认比较器的原理是升序的,返回的是2个比较对象的ASCII码的差值。

如果相等返回0 a比b大返回正数a-b的ASCII码差值 a比b小的话返回a-b的负数差值。

(如果你要倒序的 可以将上面的正负返回值倒过来)

bb911460c0e901d87c4fe5013ce2769b.png

80a3edf3eec1a41bdf7ae65eb4745544.png

2676f3385478928bdecd837fd766face.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值