HashMap:一个键,多个值

我想知道如何才能得到这张地图上的第一个键的第三个值。 这可能吗? 对不起,如果这是再次问,但我没有find类似的东西。

存在库来做到这一点,但最简单的Java方法是创build一个像这样的ListMap

 Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>(); 

这听起来像你正在寻找一个multimap 。 Guava有各种Multimap实现,通常是通过Multimaps类创build的。

我build议使用这个实现可能比自己做的更简单,找出API的样子,在添加一个值时仔细检查现有的列表等等。如果你的情况对第三方库有特殊的反感,可能值得这样做,否则番石榴是一个神话般的图书馆,这可能会帮助你与其他代码:)

例如:

 Map<Object,Pair<Integer,String>> multiMap = new HashMap<Object,Pair<Integer,String>>(); 

Pair是一个参数类

 public class Pair<A, B> { A first = null; B second = null; Pair(A first, B second) { this.first = first; this.second = second; } public A getFirst() { return first; } public void setFirst(A first) { this.first = first; } public B getSecond() { return second; } public void setSecond(B second) { this.second = second; } } 

你有这样的事吗?

 HashMap<String, ArrayList<String>> 

如果是这样,你可以遍历你的ArrayList,并获取你喜欢的项目arrayList.get(i)。

标准Java HashMap不能为每个键保存多个值,添加的任何新条目都会覆盖前一个键。

尝试使用集合来存储密钥的值:

 Map<Key, Collection<Value>> 

你必须自己维护价值清单

这是我在类似问题的答案中find的

 Map<String, List<String>> hm = new HashMap<String, List<String>>(); List<String> values = new ArrayList<String>(); values.add("Value 1"); values.add("Value 2"); hm.put("Key1", values); // to get the arraylist System.out.println(hm.get("key1")); 

结果:[值1,值2]

我发现随机search的博客,我认为这将有助于做到这一点: http : //tomjefferys.blogspot.com.tr/2011/09/multimaps-google-guava.html

 public class MutliMapTest { public static void main(String... args) { Multimap<String, String> myMultimap = ArrayListMultimap.create(); // Adding some key/value myMultimap.put("Fruits", "Bannana"); myMultimap.put("Fruits", "Apple"); myMultimap.put("Fruits", "Pear"); myMultimap.put("Vegetables", "Carrot"); // Getting the size int size = myMultimap.size(); System.out.println(size); // 4 // Getting values Collection<String> fruits = myMultimap.get("Fruits"); System.out.println(fruits); // [Bannana, Apple, Pear] Collection<string> vegetables = myMultimap.get("Vegetables"); System.out.println(vegetables); // [Carrot] // Iterating over entire Mutlimap for(String value : myMultimap.values()) { System.out.println(value); } // Removing a single value myMultimap.remove("Fruits","Pear"); System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear] // Remove all values for a key myMultimap.removeAll("Fruits"); System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!) } } 

考虑一个带有2个键的Map立即强迫我使用用户定义的键,这可能是一个类。 以下是关键类:

 public class MapKey { private Object key1; private Object key2; public Object getKey1() { return key1; } public void setKey1(Object key1) { this.key1 = key1; } public Object getKey2() { return key2; } public void setKey2(Object key2) { this.key2 = key2; } } // Create first map entry with key <A,B>. MapKey mapKey1 = new MapKey(); mapKey1.setKey1("A"); mapKey1.setKey2("B");