Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用键名及其值在Java中存储数据?_Java_Collections_Map - Fatal编程技术网

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

如何使用键名及其值在Java中存储数据?,java,collections,map,Java,Collections,Map,在这种情况下,我希望使用键及其值将数据存储在对象中。键名称相同,但值已更改。我试图使用哈希映射,但它也不支持这一点。它将覆盖所有值,并仅以成对方式提供最近的值 我的问题是:是否有任何类或方法可以帮助我解决这个问题?如果需要跟踪多个值,可以在映射中使用列表值。您可以假设列表中的最后一个值是最近的值,如果这符合您的要求 创建这样一个映射的过程如下:虽然键和值类型不必是字符串,但它们可以是您正在使用的任何类: Map<String, List<String>> map = ne

在这种情况下,我希望使用键及其值将数据存储在对象中。键名称相同,但值已更改。我试图使用哈希映射,但它也不支持这一点。它将覆盖所有值,并仅以成对方式提供最近的值


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

如果需要跟踪多个值,可以在映射中使用列表值。您可以假设列表中的最后一个值是最近的值,如果这符合您的要求

创建这样一个映射的过程如下:虽然键和值类型不必是字符串,但它们可以是您正在使用的任何类:

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

Java的标准集合不包括用于所谓的多重映射的类,但其他几个集合库提供了此功能。例如:

来自Apache Commons 来自谷歌收藏 使用什么数据结构

如果要求为一个键存储多个值,那么使用

这种多重映射的一个实现是来自库的

根据对键和值的多重性和顺序的要求,Guava中的Multimap接口有几个实现

选择实现

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


保留映射到键的值的顺序,即它们映射到键的顺序。

是否要存储绑定到单个键的多个值?这当然是可能的。如何区分哪一个是正确的值?如果有意义的话,请考虑子类HashMap,以便将这个逻辑封装在一个类中。提供一个简单的接口,比如put、getLast、getAll等。是的,或者像其他一些帖子所建议的那样,只包含一个多映射实现。我忘记了这些,我过去用过一个,非常方便。你能为上面的问题提供一个核心JAVA的例子吗。这真的很有趣,如果你能用一个例子提供帮助,我将不胜感激。