Java HashSet不';不要拒绝第二次添加呼叫

Java HashSet不';不要拒绝第二次添加呼叫,java,collections,hashset,Java,Collections,Hashset,我刚刚开始收集,我已经编写了代码来测试HashSet 下面是代码(Person.java): 实现类,只是一个简单的类: import java.util.*; class HashSetTest { public static void main(String[] args) { Set<Person> set=new HashSet<Person>(); Person p1=new Person(6); Person p2=new P

我刚刚开始收集,我已经编写了代码来测试
HashSet

下面是代码(Person.java):

实现类,只是一个简单的类:

import java.util.*;

class HashSetTest
{
  public static void main(String[] args)
  {
    Set<Person> set=new HashSet<Person>();
    Person p1=new Person(6);
    Person p2=new Person(6);
    System.out.println(set.add(p1));
    System.out.println(set.add(p2));        
  }
}
import java.util.*;
类HashSetTest
{
公共静态void main(字符串[]args)
{
Set=newhashset();
人员p1=新人员(6);
人员p2=新人员(6);
系统输出打印LN(设置添加(p1));
System.out.println(set.add(p2));
}
}

如果我没有错,那么第二个
System.out.println
语句应该返回
false
,因为它不应该添加重复的元素,而是返回true。

当元素匹配时,
Person.equals
方法似乎返回
false

应该是

if (this.id==p.id)
    return true;
else
    return false;

当元素匹配时,
Person.equals
方法似乎返回
false

应该是

if (this.id==p.id)
    return true;
else
    return false;

您的
equals
方法有问题。当id相同时,它返回
false

您的
equals
方法有问题。当id相同时,它返回
false

或只返回this.id==p.id感谢它的工作…当一个人调用equals时,一个问题可能是非常愚蠢的,而hashocde发生在我没有编写任何调用的时候it@Deepak_Sharma:查看
HashSet
的源代码并遵循控制流。或者只
返回this.id==p.id感谢它的工作…当一个人调用equals时,一个问题可能是非常愚蠢的,而hashocde发生在我没有编写任何调用的时候it@Deepak_Sharma:查看
HashSet
的源代码并遵循控制流。