java基础(七)--- set
Set
(1)Set集合的特点
无序(存入和取出顺序),唯一
(2)HashSet集合
A:底层数据结构是哈希表(是一个元素为链表的数组)
B:哈希表底层依赖两个方法:hashCode()和equals()
执行顺序:
首先比较哈希值是否相同
相同:继续执行equals()方法
返回true:元素重复了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合
C:如何保证元素唯一性的呢?
由hashCode()和equals()保证的
注意:如果需要把某个类的对象保存到HashSet集合中,重写equals()方法和hashCode()方法是,尽量保证对象通过equals()方法返回值为true时,hashCode的返回值也为true;
HashSet中每个能存储元素的“槽位”slot通常被称为“桶”bucket,如果有多个元素的hashCode值相同,但equals()方法返回false。就需要在一个“桶”里放多个元素,这样会导致性能下降;
(3)TreeSet集合
A:底层数据结构是红黑树(是一个自平衡的二叉树)
B:保证元素的排序方式
a:自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
b:比较器排序(集合具备比较性)
让集合构造方法接收Comparator的实现类对象
TreeSet判断两个元素是否相等,是通过compareTo()方法返回值,值为0,认为元素相等。