一个有多个键值的hashmap?

时间:2012-03-03 06:17:57

标签: java hashmap

我对有多个键值的哈希映射有疑问。假设我有(键/值)

1 / a,1 / b,1 / 3,2 / aa,2 / bb,2 / cc。

这会有用吗?

如果确实如此,我是否可以通过它循环并仅显示键1或2的所有值?

4 个答案:

答案 0 :(得分:6)

您可以使用带有列表的地图作为值,例如:

HashMap<Integer, List<String>> myMap = new HashMap<Integer, List<String>>();

答案 1 :(得分:3)

java.util.HashMap不允许您将多个值映射到单个键。你想使用Guava的Multimap's之一。阅读界面以确定适合您的实施版本。

答案 2 :(得分:3)

简单的MultiMap看起来就像这个骨架:

public class MultiMap<K,V>  
{
    private Map<K,List<V>> map = new HashMap<K,List<V>>();
    public MultiMap() 
    { 
        // Define constructors
    }

    public void put(K key, V value)
    {
        List<V> list = map.get(key);
        if (list == null)
        {
            list = new ArrayList<V>();
            map.put(key, list);
        }
        list.add(value);
    }

    public List<V> get(K key)
    {
        return map.get(key);
    }

    public int getCount(K key)
    {
        return map.containsKey(key) ? map.get(key).size() : 0;
    }
}

它无法直接实现Map<K,V>,因为put无法返回被替换的元素(您永远不会替换)。完整的详细说明将定义interface MultiMap<K,V>和实现类,为简洁起见,我省略了它,以及您可能需要的其他方法,例如V remove(K key)V get(K key, int index) ......你可以想到的任何其他可能有用的东西: - )

答案 3 :(得分:0)

地图会处理一个值的多个键,因为只有键必须是唯一的: 地图(键,值)

但是,多个值的一个键需要一个map严格的多重映射: 地图(键,列表(值))

另外,如果您决定使用HashMap和/或HashSet,那么无论您使用什么键,都应该实现一个好的hadhCode()函数

编辑:必须使用()而不是&lt;&gt;因为我的手机或者软件的移动网站编辑器破坏了&lt;&gt;符号....奇