我有一種情況,我想用一個鍵和它的值將數據存儲在一個對象中。密鑰名稱相同,但值已更改。我試圖使用哈希映射,但它也不支持這一點。它會覆蓋所有值,並且只給出對中的最新值。如何使用密鑰名稱及其值存儲Java數據?
我的問題是:是否有任何類或方法可以幫助我理清這個問題?
我有一種情況,我想用一個鍵和它的值將數據存儲在一個對象中。密鑰名稱相同,但值已更改。我試圖使用哈希映射,但它也不支持這一點。它會覆蓋所有值,並且只給出對中的最新值。如何使用密鑰名稱及其值存儲Java數據?
我的問題是:是否有任何類或方法可以幫助我理清這個問題?
使用
什麼數據結構,如果要求存儲多個值一個鍵,那麼使用multimap將是一個不錯的選擇。
這種多映射的一個實現是來自Google Guava庫的Multimap
。
Guava中的Multimap
接口有多種實現,具體取決於鍵和值的多重性和排序的要求。
選擇的實施
一個簡單的實現是HashMultimap
,其中由密鑰映射的值將不允許重複,並且鍵的順序不是決定性因素。
ArrayListMultimap
按映射到密鑰的順序保留映射到密鑰的值的順序。
如果您需要跟蹤多個值,則可以在地圖中使用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);
}
http://www.javaworld.com/jw-07-2000/jw-0707-java101.html – Jason 2011-02-05 05:12:52
你想存儲多個值綁定到一個單一的關鍵?這當然是可能的。你如何區分哪一個是正確的值? – ig0774 2011-02-05 05:13:50