Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
對上述地圖我想用鑰匙1,預計輸出相關的所有值。
主要:: 1的值是:: XYZ,ABC,CDE
值的順序並不重要。
Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
對上述地圖我想用鑰匙1,預計輸出相關的所有值。
主要:: 1的值是:: XYZ,ABC,CDE
值的順序並不重要。
在地圖中,關鍵應始終爲unique
。如果一個新的價值的現有鍵關聯,其將覆蓋現有條目的值。
您可能需要檢查Map#put(K, V)方法的接口。
如果映射先前包含密鑰的映射,則舊值 將被指定值替換。
所以在你的情況下,你的地圖將始終有"cde"
作爲密鑰"1"
的值。
這是不可能的,因爲它將一個鍵值映射到值,所以地圖被稱爲地圖。多個按鍵可以映射到相同的值,但不是周圍的其他方式。
你可能想要的是一個地圖映射到一個List<String>
代替:
final Map<String, List<String>> map = new HashMap<>();
if (map.get("1") == null) {
map.put("1", new ArrayList<String>());
}
map.get("1").add("xyz");
// ...
增加一個輔助函數可能比較方便
public static <K, V> void add(final K key, final V value, final Map<K, List<V>> map)
{
if (map.get(key) == null) {
map.put(key, new ArrayList<V>());
}
map.get(key).add(value);
}
在地圖,你不能有重複鍵。所以在把重點1「CDE」你的情況最終值將保持在地圖
你可以做一些事情像下面才達到你期望
Map<String, List<String>> map = new HashMap<>();
List<String> list=new ArrayList<>();
List<String> list1=new ArrayList<>();
list.add("xyz");
list.add("abc");
list.add("cde");
list1.add("err");
map.put("1", list);
map.put("2",list1);
System.out.println(map.get("1"));
你不能用這種類型做什麼的地圖。地圖中的關鍵字必須是唯一的。
爲了做到這一點,您應該聲明一個映射,其中鍵是字符串,但值是字符串的集合。
Map<String,Collection<String>> map = new HashMap<String,Collection<String>>();
將列出值從它,你可以做到這一點
for(String valueOfKey : map.get("key") {
//print or something else
}
注意,一些值添加到它,你必須先檢查該鍵已經存儲如果沒有的話拳頭聲明採集。
if(map.contains("key") == false) {
map.put(new ArrayList<String>());
}
map.get("key").add("value");
由於這是衆所周知的設計,你可能會在番石榴框架和利益Multimap
這個類的好處是,它已經實現的邏輯如何從中添加和檢索值。
你不能有一個哈希表重複鍵看到下面的S.O爲What happens for duplicate keys in HashMap
一個映射不能有重複鍵。
如果你想實現你所描述的問題。首先你需要使用multimaps
你在做什麼是錯誤的。
地圖不允許重複。
所以一個鍵----------->一個值
將指定值與此映射(可選操作)指定的鍵。如果映射先前包含該鍵的映射,則舊值由指定值替換。 (A地圖米據說含有一個密鑰k的映射當且僅當m.containsKey(K)將返回true。)
可以打印各key
和value
的值等
Ex:
Map<String, String> map = new HashMap<String, String>();
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
HashMap :: put覆蓋與密鑰關聯的舊值。您必須在每個映射條目中放入一個List,並在適當的列表中插入新值。
使用多重映射
MultiMap mapValue = new MultiValueMap();
mapValue.put("1", "xyz");
mapValue.put("1", "abc");
mapValue.put("1", "cde");
mapValue.put("2", "err");
System.out.println("Map : " + mapValue);
輸出:Map : {2=[err], 1=[xyz, abc, cde]}
如果您需要重複鍵(甚至不知道爲什麼您應該),請重新考慮使用另一個集合。 – araknoid
您可能需要一個multimap - http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html –
首先您需要了解HashMap的概念,其內部生活。我鼓勵你在[我的教程](http://volodial.blogspot.com/2013/07/internal-life-of-hashmap-in-java.html)中解釋所有這些內容! –