我有一个关于hashmaps与多个键值的问题。假设我有(键/值)带有多个键值的散列表?
1/a,1/b,1/3,2/aa,2/bb,2/cc。
会这样吗?
如果是这样,我可以通过它循环显示所有值,只显示键1或2?
我有一个关于hashmaps与多个键值的问题。假设我有(键/值)带有多个键值的散列表?
1/a,1/b,1/3,2/aa,2/bb,2/cc。
会这样吗?
如果是这样,我可以通过它循环显示所有值,只显示键1或2?
java.util.HashMap
不允许您将多个值映射到单个键。你想使用番石榴的一个Multimap's。通读界面以确定哪个实施版本适合您。
您可以使用地图列表作为值,例如:
HashMap<Integer, List<String>> myMap = new HashMap<Integer, List<String>>();
一个简单的多重映射会是这个样子的骨架:
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)
...以及其他所有您可能认为可能有用的方法: - )
地图将处理多个键,一个值,因为只有钥匙不必是唯一的: 地图(键,值)
但是一个关键多个值要求是张地图,严格的多重映射: 地图(关键,列表(值))
此外,无论你用作关键,真的应该实现一个很好的hadhCode()函数如果你决定使用HashMap和/或HashSet的
编辑:不得不使用()代替<>,因为我的手机或SOF的移动网站的编辑重挫的<>符号....奇
感谢。有没有其他方式不使用外部来源? – cataschok 2012-03-03 06:24:21
请参阅BlackRiders答案。 – 2012-03-03 06:27:17