0

MyClass2 つの整数を格納する があり、呼び出さVector<MyClass>れた がありmyVectorます。

今、私はこれを行います:

...
myVector.add(new MyClass(1,1));
for(MyClass m : myVector)
    System.out.println(m);
System.out.println(myVector.size());

myVector.remove(new MyClass(1,1));
for(MyClass m : myVector)
    System.out.println(m);
System.out.println(myVector.size());
...

ここでの問題は、Vector とそのサイズを印刷するとわかるように、オブジェクトが削除されていないことです。どうすれば修正できますか?

編集:オブジェクトが見つからないことがわかり、contains()確認するためにテストしました。私が必要とするのは、それを値で比較することです。演算子をオーバーロードできれば==実行できますが、これを修正する方法がわかりません。

編集2:わかりました、equals()私がやりたいことをします。しかし、hashCode メソッドに何を入れればよいかわかりません。

編集 3: contains() で見つけることができますが、削除しても削除されません。

ただし、これを使用して削除できます。

int position = myVector.indexOf(new MyClass(1,1));
myVector.remove(position);

remove(new MyClass(1,1) と同じですが、上記のコードは機能し、remove() は機能しません。

4

4 に答える 4

2

次の 2 つの選択肢があります。

  • equals()MyClass に実装する、または
  • 追加した同じオブジェクト インスタンスを削除する

追加したのと同じインスタンスを削除するようにコードを変更しました。

MyClass myClass = new myClass(1,1);
myVector.add(myClass );
for(myClass m : myVector)
  System.out.println(m);
System.out.println(myVector.size());

myVector.remove(myClass );
for(myClass m : myVector)
  System.out.println(m);
System.out.println(myVector.size());

他の人が --のサンプル実装を提供しているように見えequals()ますが、それがあなたが望むものかどうかを判断する必要がありますか? そうかもしれません。上記の 2 つの選択肢のどちらがこのオブジェクトに適しているかを選択できます。

他の人が言ったように、実装する場合は実装するequals()必要がありhashCode()ます。Eclipse には、 と の両方を実装する便利な右クリック オプションがequals()ありhashCode()ます。equals()これは理論的な問題のように思えますが、実際にはそうではありません。

于 2009-02-26T00:12:24.050 に答える
1

最初の myClass と同じ値が含まれているにもかかわらず、別の myClass を削除しようとしています。

それらが等しいと見なされるようにする場合は、myClass の equals メソッドをオーバーライドして、値が等しいことを確認する必要があります。

于 2009-02-26T00:08:43.323 に答える
0

これらの 2 つのオブジェクトが考慮されるように実装する必要があり.equals()ます...まあ、等しいです。ただし、 と のコントラクトは.equals().hashCode()基本的に を実装する.hashCode()たびに実装する必要があることを示していることに注意してください.equals()

効果的な Java の第 3 章で詳しく説明します。

于 2009-02-26T00:11:16.767 に答える
0

grammar31さんの回答にはほとんど誤りがありません。ここで修正してください:

@Override
public boolean equals(Object o) {
  if ((o == null) || (o.getClass() != myClass.class)) {
    return false;
  }
  myClass other = (myClass) o;
  return (other.a == this.a) && (other.b == this.b);
}

@Override
public int hashCode() {
  return a * 31 + b;
}

myClassこれはintメンバーaとがあると仮定しますb

于 2009-02-26T00:18:10.417 に答える