2012-02-27 88 views
1

請原諒這個相當基本的問題,但我對Java很陌生,仍然在找我。什麼是Java Key:用於重複值的值數據類型?

我正在寫一個web刮板,需要以某種方式存儲key:value數據。我已經使用HashMaps到現在已經很好,除了現在我需要允許重複值的唯一鍵。例如,這應該是允許的:

Key:Value 
abc : 123 
cde : 727 
efg : 123 
hij : 123 
klo : 876 
opa : 909 

任何人都可以建議在這些情況下最好使用什麼?

感謝

+0

'HashMap'應該可以正常工作。 – 2012-02-27 23:19:50

回答

4

這使用java.util.HashMap已經是可能的。它是重複的這是不可能的。

將鍵映射到值的對象。地圖不能包含重複的鍵;每個鍵可以映射到最多一個值。

From java.util.MapJavaDoc(由HashMap實現)。

+0

謝謝你的澄清。事實證明,我認爲他們不能這樣做的原因是因爲我的代碼中的其他地方存在一個錯誤。我懷疑價值觀不可能重複,進一步的研究發現了一些證明我懷疑的(錯誤)信息,我應該仔細研究。再次感謝。 – Mike 2012-02-29 12:48:47

0

您可以使用帶有列表的Map(HashMap是OK)。

Map<String,List<String>> map = new HashMap<String,List<String>>(); 

void put(String key, String value) 
{ 
    List<String> entry = map.get(key); 
    if(entry == null) 
    { 
    entry = new ArrayList<String>(); 
    map.put(key, entry); 
    } 
    entry.add(value); 
} 

List<String> get(String key) 
{ 
    return map.get(key); 
} 
0

我會建議從鍵到某種集合的地圖。 Java中沒有內置任何內容(儘管在其他集合框架中有多個映射類型,如Apache CollectionsGuava)。如果你只是想跟蹤哪些值與每個鍵關聯,沒有訂單或計數的信息,您可以使用

Map<KeyType, Set<ValueType>> map = new HashMap<KeyType, Set<ValueType>>(); 

不幸的是,插入是更復雜一點。您需要測試密鑰是否存在,如果不存在,請首先在密鑰下添加一個Set<ValueType>。然後,您可以將新值添加到該集。

相關問題