Get a HashSet out of the keys of a HashMap?

时光怂恿深爱的人放手 提交于 2019-12-10 14:14:31

问题


I have a pretty big (100'000s of entries) HashMap. Now, I need a HashSet containing all the keys from this HashMap. Unfortunately, HashMap only has a keySet() method which returns a Set but not a HashSet.

What would be an efficient way to generate such a HashSet using Java?


回答1:


Why do you specifically need a HashSet?

Any Set have the same interface, so typically can be used interchangeably, as good-practices requires that you use the Set interface for all of them.


If you really need so, you could create one from the other. For generic code, it could be:

    Map<B, V> map = ...;
    HashSet<B> set = new HashSet<B>(map.keySet());



回答2:


Assuming that the word 'efficient' is the key part of your question, and depending what you want to do with the set, it might be an idea to create your own subclass of HashSet which ignores the HashSet implementation and presents a view onto the existing map, instead.

As a partially implemented example, it might look something like:

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... */
}

If you don't know how the class will be used, you'll need to take care to override all the relevant methods.




回答3:


HashSet myHashSet = new HashSet(myHashMap.keySet());

Haven't tried it.




回答4:


Can you not create the HashSet from an existing Set ? But (more importantly) why are you worried about the implementation returned to you from the keySet() method ?




回答5:


Set set=new HashSet(map.keySet());



来源:https://stackoverflow.com/questions/1625814/get-a-hashset-out-of-the-keys-of-a-hashmap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!