我有一种情况,我希望将数据存储在具有键及其值的对象中。键名相同,但值已更改。我试图使用哈希映射,但它也不支持这个。它覆盖了所有的值,只给出了最近的值。
我的问题是:是否有任何类或方法可以帮我解决这个问题?
答案 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)