2011-02-05 41 views
0

我有一種情況,我想用一個鍵和它的值將數據存儲在一個對象中。密鑰名稱相同,但值已更改。我試圖使用哈希映射,但它也不支持這一點。它會覆蓋所有值,並且只給出對中的最新值。如何使用密鑰名稱及其值存儲Java數據?

我的問題是:是否有任何類或方法可以幫助我理清這個問題?

+0

http://www.javaworld.com/jw-07-2000/jw-0707-java101.html – Jason 2011-02-05 05:12:52

+0

你想存儲多個值綁定到一個單一的關鍵?這當然是可能的。你如何區分哪一個是正確的值? – ig0774 2011-02-05 05:13:50

回答

4

使用

什麼數據結構,如果要求存儲多個值一個鍵,那麼使用multimap將是一個不錯的選擇。

這種多映射的一個實現是來自Google Guava庫的Multimap

Guava中的Multimap接口有多種實現,具體取決於鍵和值的多重性和排序的要求。

選擇的實施

一個簡單的實現是HashMultimap,其中由密鑰映射的值將不允許重複,並且鍵的順序不是決定性因素。

ArrayListMultimap按映射到密鑰的順序保留映射到密鑰的值的順序。

4

如果您需要跟蹤多個值,則可以在地圖中使用List值。如果符合您的要求,您可以使用列表中最後一個值是最新值的假設。

創建這樣的地圖將這樣做(雖然你的密鑰和值類型不必是字符串,他們可能是你使用任何類):

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

然後拿到對於給定的關鍵最新值,你需要得到相應的列表的最後一個元素:

List<String> list = map.get(key); 
String value = null; 
if (list != null) { 
    value = list.get(list.size() - 1); 
} 

要將值添加到地圖,你需要添加邏輯來創建一個新的列表,如果沒有值存在一個新的密鑰,否則將新值添加到列表的末尾:

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

Java的標準集合不包含所謂「multimaps」的類,但其他幾個集合庫提供此功能。例如:

相關問題