保证元素唯一性:同时重写hashCode和equals方法
HashSet底层的数据结构是哈希表:数组+链表+红黑树
1.哈希值计算:调用hashCode方法得到原始哈希值,再拿原始哈希值向右16位进行哈希扰动,用扰动后的哈希值与原始哈希值进行异或操作,以此来减少哈希冲突,减少重复索引,将列表打散
2.再计算索引位置时:用数组长度-1 & 刚刚计算的哈希值,提高计算效率(底层是二进制)
总结:当添加对象的时候,会先调用对象的hashCode方法计算出一个应该存入的索引位置,查看该位置上是否存在元素
不存在:直接存
存在:调用equals方法比较内容
false:存
true:不存
自建类重写hashCode方法,根据对象的属性值计算哈希值,返回不同的哈希值