如何使用密钥名称及其值在Java中存储数据?

时间:2011-02-05 05:09:35

标签: java collections map

我有一种情况,我希望将数据存储在具有键及其值的对象中。键名相同,但值已更改。我试图使用哈希映射,但它也不支持这个。它覆盖了所有的值,只给出了最近的值。

我的问题是:是否有任何类或方法可以帮我解决这个问题?

3 个答案:

答案 0 :(得分:4)

如果您需要跟踪多个值,则可以在Map中使用List值。如果符合您的要求,您可以使用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);
}

要向Map添加值,如果新键没有值,则需要添加逻辑来创建新列表,否则将新值添加到列表末尾:

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

答案 1 :(得分:4)

使用什么数据结构

如果要求为单个密钥存储多个值,那么使用multimap将是一个不错的选择。

此类多图的一个实现是来自Multimap库的Google Guava

Guava中的Multimap接口有多个实现,具体取决于密钥和值的多重性和排序要求。

选择实施

一个简单的实现是HashMultimap,其中由键映射的值将不允许重复,并且键的顺序不是决定性的。

ArrayListMultimap保留映射到键的值的顺序,按照它们映射到键的顺序。

答案 2 :(得分:2)

Java的标准集合不包含所谓“multimaps”的类,但其他几个集合库提供此功能。例如: