只要一个集合底层是通过哈希算法给元素指定内存位置,那么就必须复写以上两个方法
HashSet和HashMap底层都是通过哈希算法分配内存,又这两个集合元素是不可重复 无序的
那么我们怎么定义不可重复了?哈希地址 或者内容 因为会出现以下几种状况
1 哈希值相同 但是内容不同 是可以插入的 只是在这两个元素是以链表的形式存在
2 哈希值相同 但是内容也相同 都相同 当然是不允许插入的啦
3 哈希值不同 分配的内存位置肯定不同(哈希值其实就是内存的地址的一个十六进制表示)
,内容相同与否都是可以插入集合之中的
以上除了2 之外都是能插入元素的情况
我们要做的就是保证一个哈希地址值存放一个元素,1是可以存在,但是它的访问效率低,所以就不推荐这么干
,因此我们遵循的原则是 内容如果不同,保证哈希值也不同,不就可以实现我们的唯一地址唯一内容的目的了吗
,你会想上面那句话倒着说成立不,你再想如果哈希值不同了,还有比较内容的必要吗 肯定都能插入 |