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方法,即可实现元素删除的效果,
可完美的避免此坑
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


