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

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

有帮助吗?

解决方案

为什么特别需要HashSet?

任何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());

没试过。

你能否从现有的 Set 创建 HashSet ?但是(更重要的是)为什么你担心从 keySet()方法返回给你的实现?

设置set = new HashSet(map.keySet());

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top