1

コレクションを始めたばかりで、テストするコードを書きました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;
  }
}

そして、単純なクラスである実装クラス:

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

私が間違っていなければ、2 番目のSystem.out.printlnステートメントが返さfalseれるはずです。これは、重複しているため要素を追加するべきではありませんが、true を返しているためです。

4

2 に答える 2

6

要素が一致するPerson.equalsとメソッドが返されるようです。false

そのはず

if (this.id==p.id)
    return true;
else
    return false;
于 2013-02-20T13:27:40.313 に答える
1

あなたのequals方法には問題があります。falseidが同じ場合に返されます。

于 2013-02-20T13:27:56.723 に答える