Set: 元素唯一 存入和取出的顺序不同 无索引
HashSet:元素唯一
HashSet是如何保证元素的唯一性的呢?
底层依赖两个方法 equals和hashCode()方法
先比较元素的hashCode()返回值,
如果值相同:调用equals方法
如果equals方法返回true:说明相同 则不添加该元素
如果返回false :说明不同 则添加该元素
如果值不相同:就直接添加
所以说为了提高效率(也就是减少equals的比较次数),我们要让hashCode()尽量返回不同的值
所以说我们为了保证HashSet存入元素的唯一性,需要让元素所在的类重写 equals()和hashCode()
hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
如何敲出来呢:eclipse自动生成
eclipse自动生成的hashCode()里面 为什么是31?
* 1:31是一个质数,质数是能被1和自己本身整除的数
* 2:31这个数既不大也不小
* 3:31这个数好算,2的五次方-1,2向左移动5位 |
|