Java集合Set及HashSet以及TreeSet

1.set子接口

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

2.实现set

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

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

 

 

3.HashSet存储原理:

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

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

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

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

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

 

 

 

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

 

 

5.TreeSet

基于红黑树实现

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

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

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

 

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

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

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

 

 

 

 

 

posted @ 2021-02-23 17:25  枫叶像思念  阅读(78)  评论(0编辑  收藏  举报