HashSet不会拒绝第二次添加调用

时间:2013-02-20 13:23:47

标签: java collections hashset

我刚开始使用Collection,我编写了代码来测试HashSet

这是代码(Person.java):

public class Person
{
  int id;

  public Person(int id)
  {
    this.id=id;
  }

  public int getId()
  {
    return id;
  }

  public void setId(int id)
  {
    this.id=id;
  }

  public boolean equals(Object o)
  {
    if (o instanceof Person)
    {
      Person p=(Person)o;
      if (this.id==p.id)
        return false;
      else
        return true;
    }
    else return false;
  }

  public int hashCode()
  {
    return 21*id;
  }
}

和Implementation类,只是一个简单的类:

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));        
  }
}

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

2 个答案:

答案 0 :(得分:6)

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

应该是

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

答案 1 :(得分:1)

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