Set接口:在Collection的基础上没有再做功能的扩展
特点:
1.没有索引值
2.不可以重复
Set集合不重复原理:
新增元素:
1. 求新增元素的哈希值
2. 新增元素的哈希值%数组长度,确定新增元素在数组中的索引值位置
如果该位置为null:则直接新增
如果不为null:则 判断是否重复相同(用equals方法比较属性值)
如果重复:不新增
如果不重复:则新增挂到该索引值对应链表的最后位置
判断两个元素是否相同的逻辑:
p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))
两个元素的哈希值相同 && (地址值相同 || equals相同)
如果这个为true,就认为是同一个元素
哈希值:是通过调用hashCode方法得来的int类型的整数,该方法属于Object类的方法
所有对象都可以调用
hashCode方法得到的哈希值简单来说可以理解为地址值。
自定义类中如果认为成员变量的值相同就是一个元素,在set集合中只添加一次,
则可以通过快捷方式覆盖重写hashCode方法和equals方法
HasshSet中存贮的如果是自定义对象,需要重写hashCode和equals方法(比如Student)
String Integer等java已经重写过了hashCode和equals,不需要重写