HashSet中remove方法的坑

戚薇 Java经验 发布时间:2023-06-15 08:32:43 阅读数:14485 1
今天使用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方法,即可实现元素删除的效果,
    可完美的避免此坑
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202306/16867891916791.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者