繁体   English   中英

一个具有多个价值键的哈希图?

[英]a hashmap with multiple keys to value?

我有一个关于具有多个键值的哈希图的问题。 假设我有(键/值)

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

这行得通吗?

如果是这样,我是否可以循环浏览并仅显示键1或2的所有值?

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

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

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

一个简单的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) ...以及其他您可能认为有用的方法:-)

由于只有键是唯一的,因此Map会将多个键处理为一个值:Map(key,value)

但是,多个值的一个键需要s的多重映射,严格限制为:Map(key,list(values))

此外,如果您决定使用HashMap和/或HashSet,则无论用作键,实际上都应该实现良好的hadhCode()函数。

编辑:必须使用()代替<>,因为我的移动或sof的移动网站编辑器破坏了<>符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM