HashSet就是采用哈希算法存取对象的集合,它内部采用对某个数字n进行取余的方式对哈希码进行 分组和划分对象的存储区域,object类中定义一个hashCode()方法来返回每个java对象的哈希码 当从HashSet集合查找某个对象时,java系统首先调用对象的hashCode方法获取该对象的哈希码 然后根据哈希码找到相应的存储区域,最后取出该存储区域的每一个元素与该对象进行equals方法比较,这样不用遍历集合中的所有元素就可以得到结论。新建对象哈希值不同。当覆盖hashCode和equals方法时会改变object类的hashcode方法。
当一个对象被存储进hashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段否则对象修改后的哈希值与最初存储进h在这种情况下,即使在contains方法之一该对象的当前应用作为的参数去hashSet集合中检索对象,也就返回找不到对象的结果,
这也会导致无法从hashSet集合中单独删除当前对象,从而造成内村泄露ashSet集合中时哈希值就不同了。 |