假设我有一个哈希图。
&&
现在,我在此地图中添加了一些值,如下所示。
HashMap<String,String> hm = new HashMap<String,String>();
此后,我再次为已经存储的键“ A”输入一些值。
hm.put("A","First");
hm.put("B","First");
现在,如果我尝试获取“ A”的值,则将获得“ Second”作为其值。
hm.put("A","Second");
输出
sysout(hm.get("A"));
有什么方法可以获取先前的值,即Second
吗?
非常感谢您的帮助。
答案 0 :(得分:3)
否,但是您可以使用列表作为值。这样就变成了:
Map<String, List<String>> map = ...;
然后您可以在列表中添加或删除元素,以便能够检索以前的值。
map.get(key).add(value);
这将添加到地图的列表中,并且在搜索最新值时,您可以使用
List<String> list = map.get(key);
String value = list.get(list.size()-1);
答案 1 :(得分:1)
据我所知,您可以通过两种方式做到这一点:
检查旧的key
返回的值是否为您返回了一个值
(即是否为null
)。现在,您可以在投入之前捕获该值
所述键的新值。
插图:
HashMap<String, String> hmap = new HashMap<>();
hmap.put("A", "First");
if (hmap.get("A") != null) {
String oldValue = hmap.get("A");
hmap.put("A", "Second");
}
我们知道put()
方法返回前一个的值
键
在此映射中将指定的值与指定的键相关联。如果 该映射先前包含该键的映射,旧值为 替换。
@返回与键关联的先前值
所以您可以:
String oldValue = hmap.put("A", "Second");
答案 2 :(得分:1)
要获取先前的值,可以将put方法的返回值分配给字符串
hm.put("A","First");
String temp = hm.put("A","Second");
System.out.println(temp); // prints first
答案 3 :(得分:0)
法线贴图不能那样工作。在法线贴图中,旧值将被覆盖并消失。
但是,有一个类似于地图的数据结构,它保存了已放入地图中的一组值:multi-map。
示例:
ListMultimap<String, String> m = ArrayListMultimap.create();
m.put("A", "First");
m.put("A", "Second");
for (String s : m.get("A")) {
System.out.println(s);
}
// Prints:
// First
// Second
在许多情况下使用多地图非常方便,并且值得一读。
此处的示例代码使用了Guava库中的多图。可以从Maven Repository下载。
答案 4 :(得分:0)
有很多实现此目标的机会,问题是您希望保存值有多深。您还需要10次看跌期权操作之后的第一个值吗?您需要排序吗?
您可以通过HashTable以未排序的方式实现此目的,请参见Java HashTable: https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html
Hashtable<Key, Element> table;
排序方式可能是使用Stack或其他方式:
HashMap <Key,Stack<Element>> values;
https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html
因此您可以像这样访问第一个元素
values.get("A").peek();
如果必须访问堆栈中的随机元素,请为此使用LinkedList:
HashMap<Key,LinkedList<Element>> values;
values.get("A").getFirst();
values.get("A").getLast();
如果使用HashMap之类的方法,请确保始终覆盖hashCode()和equals()方法。