是否可以在Hashmap中获取以前的存储值?

时间:2018-12-04 12:44:06

标签: java collections hashmap

假设我有一个哈希图。 && 现在,我在此地图中添加了一些值,如下所示。 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吗?

非常感谢您的帮助。

5 个答案:

答案 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)

据我所知,您可以通过两种方式做到这一点:

  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");    
    }
    
  2. 我们知道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()方法。