Set集合
1. Set集合的特点
- 不包含重复的元素
- 没有带索引的方法,所以不能使用普通for循环进行遍历
- HashSet是Set接口的一个实现类:
- 对集合的迭代顺序不做任何保证
2. 哈希值
哈希值:是JDK根据对象的地址或字符串或者数字算出来的int类型的数值。
Object类中获取哈希值的方法: hashCode()
对象的哈希值的特点:
- 同一个对象多次调用hashCode()方法得到的哈希值是相同的
- 默认情况下,不同对象的哈希值是不同的。而重写hashCode方法后,可以实现让不同对象有相同的哈希值
3. HashSet集合的概述和特点
HashSet集合的特点:
- 底层数据结构是哈希表
- 不能保证存取一致
- 没有带索引的方法, 也不能使用普通for循环遍历
- 不能存储重复元素
4. HashSet集合保证元素唯一
5. 哈希表
JDK8之后: 哈希表由数组+链表或红黑树实现。
当链表长度大于8时,将采用红黑树进行存储。
6. LinkedHashSet集合的概述和特点
LinkedHashSet特点:
- 哈希表和链表实现的Set接口,具有可预测的迭代次序。
- 由链表保证元素有序,即存取顺序一致。
- 由哈希表保证元素的唯一性。
7. TreeSet集合
TreeSet集合的特点:
- 元素有序,这里的有序指的不是存取顺序一致,而是按照一定的规则进行排序,具体排序方式取决于构造方法
- TreeSet(): 根据其元素的自然排序进行排序
- TreeSet(Comparator comparator): 根据指定的比较器进行排序。
- 没有带索引的方法,不能使用普通for循环进行排序
- 由于是Set集合,所以元素唯一(没有重复的元素)