从HashMap的键中获取HashSet?

Hae*_*aes 6 java hashmap hashset

我有一个非常大(100'000s的条目)HashMap.现在,我需要HashSet包含所有键HashMap.不幸的是,HashMap只有一个keySet()返回a Set但不是a的方法HashSet.

HashSet使用Java 生成这样一个有效的方法是什么?

KLE*_*KLE 19

为什么你特别需要一个HashSet?

任何Set具有相同的接口,因此通常可以互换使用,因为良好实践要求您对所有这些使用Set接口.


如果你真的需要,你可以从另一个创建一个.对于通用代码,它可以是:

    Map<B, V> map = ...;
    HashSet<B> set = new HashSet<B>(map.keySet());
Run Code Online (Sandbox Code Playgroud)


izb*_*izb 6

假设"有效"这个词是你问题的关键部分,并且根据你想要对集合做什么,创建你自己的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... */
}
Run Code Online (Sandbox Code Playgroud)

如果您不知道如何使用该类,则需要注意覆盖所有相关方法.