HashSet中remove方法的坑
今天使用HashSet中的remove方法,发现元素怎么也删除不掉哦!
无法删除元素的示例
无法删除元素的示例
public class CollectionTest { @Test public void test3(){ HashSet set = new HashSet(); Person p1 = new Person(1001,"AA"); Person p2 = new Person(1002,"BB"); set.add(p1); set.add(p2); System.out.println(set); //输出2个值[person={1001,"AA"},person={1002,"BB"}] p1.name = "CC"; set.remove(p1); System.out.println(set); //输出两个值[person={1001,"CC"},person={1001,"BB"}] set.add(new Person(1001,"CC")); System.out.println(set); //输出三个值 [person={1001,"CC"},person={1002,"BB"},person={1001,"CC"] set.add(new Person(1001,"AA")); System.out.println(set); //输出四个值 [person={1001,"CC"},person={1002,"BB"},person={1001,"CC",person={1001,"AA"] } }
那么出现这种原因: 主要是由于Set类中remove元素是依据“哈希值”来删除元素 Set类添加元素的规则: 1.比较哈希值,当哈希值相同就使用equals()方法来判断,相同删掉,不同则添加 ================================================================================= 那么以上remove无法删除元素的现象,我们只需重写HashCode方法,即可实现元素删除的效果, 可完美的避免此坑
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。