我对有多个键值的哈希映射有疑问。假设我有(键/值)
1 / a,1 / b,1 / 3,2 / aa,2 / bb,2 / cc。
这会有用吗?
如果确实如此,我是否可以通过它循环并仅显示键1或2的所有值?
答案 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;符号....奇