[英]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.