2013-07-25 32 views
-6
Map<String, String> map = new HashMap<String, String>(); 
map.put("1", "xyz"); 
map.put("1", "abc"); 
map.put("1", "cde"); 
map.put("2", "err");` 

`如何打印所有的值在HashMap中的關鍵字在Java

對上述地圖我想用鑰匙1,預計輸出相關的所有值。

主要:: 1的值是:: XYZ,ABC,CDE

值的順序並不重要。

+4

如果您需要重複鍵(甚至不知道爲什麼您應該),請重新考慮使用另一個集合。 – araknoid

+0

您可能需要一個multimap - http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html –

+0

首先您需要了解HashMap的概念,其內部生活。我鼓勵你在[我的教程](http://volodial.blogspot.com/2013/07/internal-life-of-hashmap-in-java.html)中解釋所有這些內容! –

回答

7

在地圖中,關鍵應始終爲unique。如果一個新的價值的現有鍵關聯,其將覆蓋現有條目的值。

您可能需要檢查Map#put(K, V)方法的接口。

如果映射先前包含密鑰的映射,則舊值 將被指定值替換。

所以在你的情況下,你的地圖將始終有"cde"作爲密鑰"1"的值。

0

這是不可能的,因爲它將一個鍵值映射到值,所以地圖被稱爲地圖。多個按鍵可以映射到相同的值,但不是周圍的其他方式。

你可能想要的是一個地圖映射到一個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); 
} 
0

地圖,你不能有重複鍵。所以在把重點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")); 
0

你不能用這種類型做什麼的地圖。地圖中的關鍵字必須是唯一的。

爲了做到這一點,您應該聲明一個映射,其中鍵是字符串,但值是字符串的集合。

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

這個類的好處是,它已經實現的邏輯如何從中添加和檢索值。

4

一個映射不能有重複鍵。

如果你想實現你所描述的問題。首先你需要使用multimaps

1

你在做什麼是錯誤的。

地圖不允許重複。

所以一個鍵----------->一個值

If you see docs of put()

將指定值與此映射(可選操作)指定的鍵。如果映射先前包含該鍵的映射,則舊值由指定值替換。 (A地圖米據說含有一個密鑰k的映射當且僅當m.containsKey(K)將返回true。)

可以打印各keyvalue的值等

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()); 
} 
0

HashMap :: put覆蓋與密鑰關聯的舊值。您必須在每個映射條目中放入一個List,並在適當的列表中插入新值。

4

使用多重映射

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]}

0

從Java文檔約HashMap。把(K鍵,V值)方法:

將指定值與指定的鍵入此地圖。如果地圖先前包含密鑰的映射,則舊值將被替換。

所以你不能那樣做。

相關問題