2012-03-03 84 views
1

我有一个关于hashmaps与多个键值的问题。假设我有(键/值)带有多个键值的散列表?

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

会这样吗?

如果是这样,我可以通过它循环显示所有值,只显示键1或2?

回答

3

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

+0

感谢。有没有其他方式不使用外部来源? – cataschok 2012-03-03 06:24:21

+0

请参阅BlackRiders答案。 – 2012-03-03 06:27:17

6

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

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

一个简单的多重映射会是这个样子的骨架:

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

0

地图将处理多个键,一个值,因为只有钥匙不必是唯一的: 地图(键,值)

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

此外,无论你用作关键,真的应该实现一个很好的hadhCode()函数如果你决定使用HashMap和/或HashSet的

编辑:不得不使用()代替<>,因为我的手机或SOF的移动网站的编辑重挫的<>符号....奇

相关问题