set接口
特点:
1.唯一
2.无序
3.可以存储null值,但是null值不能重复
HashSet类
特点:
此类实现Set接口,由哈希表(实际为HashMap实例)支持。
对集合的迭代次序不做任何保证;
特别是,它不能保证订单在一段时间内保持不变。这个类允许null元素
1.底层数据结构是哈希表结构,底层是通过HashMap实现
2.无序
3.允许null值
4.唯一
哈希算法原理:
1.哈希算法和对象本身有关
2.哈希算法和对象本身的hashCode有关
hashCode在没有重新hashCode方法的情况下就是地址值的一个转换值,可以理解为地址值
3.尽量保证哈希值唯一,但是不能绝对保证
哈希表结构原理:
哈希表结构如何保证元素的无序的?依赖的是随机的哈希算法产生的索引
哈希表结构如何保证元素唯一的?依赖的是hashCode和equals方法
过程是:
首先比较两个元素的hashCode是否相等
相等
比较两个元素的equals方法是否相等
相等
表示同一个元素,就不会存储在集合中
不相等
表示不是同一个元素,存储到集合中
不相等
说明两个元素不相等,直接存储
TreeSet类
特点:
1.可排序
2.唯一
3.底层数据结构是二叉树
LinkedHashSet类
特点:
底层数据结构是哈希表和链表
链表保证元素有序
哈希表保证元素唯一