我有一个相当大的(100'000s 条目)HashMap
。现在,我需要一个HashSet
包含来自 this 的所有键HashMap
。不幸的是,HashMap
只有一个keySet()
返回 aSet
而不是 a的方法HashSet
。
HashSet
使用 Java生成这样的有效方法是什么?
为什么你特别需要一个 HashSet?
任何 Set 都具有相同的接口,因此通常可以互换使用,因为良好实践要求您对所有 Set 都使用 Set 接口。
如果你真的需要,你可以从另一个创建一个。对于通用代码,它可能是:
Map<B, V> map = ...;
HashSet<B> set = new HashSet<B>(map.keySet());
假设“高效”这个词是您问题的关键部分,并且取决于您想对集合做什么,创建自己的 HashSet 子类可能是一个想法,该子类忽略 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());