0

在我的 android 应用程序中,我正在尝试使用哈希映射获取单个键的所有值。下面是我的代码。但是对于键“blr”而不是“banglore”(在我的代码中),我只得到一个值“maharashtra”。我错过了什么?

    HashMap<String, String> myMap = new HashMap<String, String>();
    myMap.put("ind", "india");
    myMap.put("tn", "tamilnadu" + " How");

    myMap.put("blr","bangalore");
     myMap.put("blr","maharashtra");
    Set<Entry<String,String>> set = myMap.entrySet();

    for (Map.Entry<String, String> me : set) {
        if(me.getKey().equals("blr")){
            System.out.println(me.getValue());

    }

}
4

5 回答 5

3

首先:你不能。如此处所述:

public V put(K key, V value)

将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

请阅读:http ://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

第二:如果您使用的是 Key, Value 结构,您很可能不应该想到有重复的键,它违背了 Key, Value 集合的目的。

一个简单的解决方案是使用HashMap<String, List<String>>而不是HashMap<String, String>. 将所有值存储在List<String>.

于 2013-07-31T10:33:34.473 回答
1

终于得到解决方案。太棒了...

import java.util.HashMap;
import java.util.Map;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;


public class hashmap {

    /**
     * @param args
     */
    public static void main(String[] args) {
       // HashMap<String, List<String> > myMap = new HashMap<String, List<String> >();
      Map<String,List<String>> myMap = new HashMap<String,List<String>>();

        List<String> arr4 = new ArrayList<String>();
        arr4.add("india");
        arr4.add("tamilnadu");
        arr4.add("tamilnadu");
        arr4.add("tamilnadu");
        arr4.add("tamilnadu");

        myMap.put("tn", arr4);
        Set<Entry<String,List<String>>> set = myMap.entrySet();

        for (Map.Entry<String, List<String>> me : set) {
            if(me.getKey().equals("tn")){
                System.out.println(me.getValue());

        }

    }

}
}
于 2013-07-31T13:07:53.900 回答
0

hashmap 的关键是键是唯一的。所以你bangaloremaharashtrawith覆盖myMap.put("blr","maharashtra");

于 2013-07-31T10:33:46.930 回答
0

键是唯一的。所以你只是覆盖了第一个作业

myMap.put("blr","bangalore");

myMap.put("blr","maharashtra");

所以,用另一个钥匙!?

于 2013-07-31T10:34:11.020 回答
0

可能您应该使用HashMap<String, List<String>>而不是HashMap<String, String>. 要将元素添加到地图:

yMap.put("blr", new ArrayList<String>());
yMap.get("blr").add("maharashtra"); 
于 2013-07-31T10:40:01.197 回答