黑马程序员技术交流社区

标题: 改变HashSet集合中的元素的成员属性,是新建了一个对象吗? [打印本页]

作者: 米中之玉    时间: 2013-8-1 16:10
标题: 改变HashSet集合中的元素的成员属性,是新建了一个对象吗?
本帖最后由 杨兴庭 于 2013-8-2 19:01 编辑

改变HashSet集合中的元素的成员属性,是新建了一个对象吗?为什么引用的地址值会改变,而且remove()时返回的是false?
作者: 王峰230321    时间: 2013-8-1 16:34
HashSet. 底层用的是哈希表. 而哈希表 是通过对属性方法的计算得来的.   ..  张老师说过.  如果我们用哈希表做底层的集合的时候 .  存进去的东西 最好不用去改变属性. 因为该了属性. 哈希值就变了. . 而且删都删不掉. 因为他哈希值变了而你又不到新的哈希值..SO..
作者: xuaner0719    时间: 2013-8-1 20:25
HashSet按Hash算法来存储集合的元素,因此具有很好的存取和查找性能。

HashSet的特点:
(1)HashSet不是同步的,多个线程访问是需要通过代码保证同步
(2)集合元素值可以使null。

HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。

程序运行结果:

即使2个A对象通过equals比较返回true,但HashSet依然把它们当成2个对象;即使2个B对象的hashCode()返回相同值,但HashSet依然把它们当成2个对象。即如果把一个对象放入HashSet中时,如果重写该对象equals()方法,也应该重写其hashCode()方法。其规则是:如果2个对象通过equals方法比较返回true时,这两个对象的hashCode也应该相同。

作者: xwf4348    时间: 2013-8-1 21:46
HashSet. 底层用的是哈希表. 而哈希表 是通过对属性方法的计算得来的。你把属性变了,相应的Hash值就变了,然后地址值肯定相应的变了。你用原来的引用去remove,当然就返回false了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2