1

件名のように:equals()はベクトルadd()remove()メソッドの動作に影響します。

私は持っていますVector<T> v;

1.再定義または機能しremove()ない場合、メソッドは正しく機能しますか?equals()hashCode()type T

2.再定義または機能しadd()ない場合、メソッドは正しく機能しますか?equals()hashCode()type T

4

1 に答える 1

4
  1. equals()forをT定義しない場合はVector.remove、デフォルトのequals()実装であるオブジェクトID(==)を使用します。
  2. Vector.add()を使用しませんequals()。重複を喜んで追加します。

いずれの場合も、Vectorはまったく使用しないhashCodeため、の実装hashCode(またはその欠如)はの動作にまったく影響しませんVector。ただし、equals()要素タイプを再定義する場合はhashCode()、他のコレクション構造が正しく機能するように再定義する必要があります。

PSおそらくArrayListの代わりに使用する必要がありVectorます。のドキュメントVectorから:

スレッドセーフな実装が必要ない場合はArrayList、の代わりに使用することをお勧めしますVector

スレッドセーフな実装が必要な場合でも、通常は独自の同期を提供することをお勧めします。によって提供される単一関数呼び出しの同期Vectorは、通常、間違った粒度で行われます。

于 2012-11-25T16:46:25.023 に答える