web-dev-qa-db-ja.com

Javaハッシュセットでオブジェクトを見つけて返す方法

HashSet javadocによると、HashSet.containsはブール値のみを返します。 hashSet内のオブジェクトを「検索」して変更するにはどうすればよいですか(プリミティブデータ型ではありません)。

HashTableにはget()メソッドがあるようですが、このセットを使用したいと思います。

12
user276712

要素を削除して、別の要素を追加できます。

ハッシュセット内にあるオブジェクトを変更することは、災害のレシピです(変更によってハッシュ値または等価動作が変更された場合)。

12
starblue

在庫SunJava.util.HashSetのソースを引用するには:

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, Java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

だからあなたは地図にお金を払っているので、あなたはそれを使うほうがよいでしょう。

12
bmargulies

セットを繰り返し処理して、オブジェクトを見つけることができます。

API doc からの警告の言葉しかし:

"注:可変オブジェクトをセット要素として使用する場合は、細心の注意を払う必要があります。オブジェクトの値が等しい比較に影響を与える方法で変更された場合、セットの動作は指定されません。オブジェクトはセット内の要素です。 "

2
Péter Török
Object oldobj; //object to modify
if (hashset.remove(oldobj)) {
   Object newobj; //modified object
   hashset.add(newobj);
}
0
Igor Artamonov

何かのようなもの:

MyObject obj = new MyObject();
HashSet hashSet = new HashSet();
hashSet.add(obj);

if (hashSet.contains(obj) == true) {
    hashSet.remove(obj);
    obj.setSomething();
    hashSet.add(obj);
}
0
kovica