私はかなり大きい(10万のエントリ)を持っていますHashMap
。今、私はこれからのHashSet
すべてのキーを含む必要がありますHashMap
。残念ながら、を返すメソッドHashMap
しかありませんが、を返しません。keySet()
Set
HashSet
HashSet
このようなJavaを使用して生成する効率的な方法は何でしょうか。
なぜハッシュセットが特に必要なのですか?
すべての Set は同じインターフェイスを持っているため、通常は交換可能に使用できます。適切な方法では、すべての Set インターフェイスを使用する必要があるためです。
本当に必要な場合は、一方から他方を作成できます。一般的なコードの場合、次のようになります。
Map<B, V> map = ...;
HashSet<B> set = new HashSet<B>(map.keySet());
「効率的」という言葉が質問の重要な部分であると仮定すると、セットで何をしたいかによっては、HashSet の実装を無視し、既存の代わりにマップします。
部分的に実装された例として、次のようになります。
public class MapBackedHashSet extends HashSet
{
private HashMap theMap;
public MapBackedHashSet(HashMap theMap)
{
this.theMap = theMap;
}
@Override
public boolean contains(Object o)
{
return theMap.containsKey(o);
}
/* etc... */
}
クラスがどのように使用されるかわからない場合は、関連するすべてのメソッドをオーバーライドするように注意する必要があります。
HashSet myHashSet = new HashSet(myHashMap.keySet());
試したことはありません。
HashSet
既存の から を作成できませんSet
か? しかし (もっと重要なことに) メソッドから返された実装について心配するのはなぜkeySet()
ですか?
set=new HashSet(map.keySet()); を設定します。