Можно ли получить предыдущее сохраненное значение в Hashmap? - PullRequest
0 голосов
/ 04 декабря 2018

Допустим, у меня есть хэш-карта.HashMap<String,String> hm = new HashMap<String,String>(); Теперь я поместил некоторые значения в эту карту, как показано ниже.hm.put("A","First"); hm.put("B","First");

После этого я снова помещаю некоторые значения для уже сохраненного ключа «A».

hm.put("A","Second");

Теперь, если я попытаюсь получить значение«A», я получу «Second» в качестве значения.

sysout(hm.get("A"));

Выход Second

Есть ли способ получить предыдущее значение, например "First"?

Помощь очень ценится.

Ответы [ 5 ]

0 голосов
/ 04 декабря 2018

Ну, есть много возможностей для достижения этого, вопрос в том, насколько глубоко вы хотите сохранить значения.Вам нужно также первое значение после 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();

Убедитесь, что вы всегда переопределяете методы hashCode () и equals (), если используете что-то вроде HashMap.

0 голосов
/ 04 декабря 2018

Нормальная карта не работает таким образом.В карте нормалей старое значение перезаписывается и исчезает.

Однако существует структура данных в виде карты, которая сохраняет набор значений, которые были введены в карту: 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 .

0 голосов
/ 04 декабря 2018

Нет, однако вы можете использовать список в качестве значения.Таким образом, это становится:

Map<String, List<String>> map = ...;

И затем вы можете добавлять или удалять элементы из списка, чтобы иметь возможность получить предыдущие значения.

map.get(key).add(value);

Это добавит к списку на картеи при поиске самого последнего значения вы можете использовать

List<String> list = map.get(key);
String value = list.get(list.size()-1);
0 голосов
/ 04 декабря 2018

чтобы получить предыдущее значение, вы можете присвоить возвращаемое значение метода put строке

hm.put("A","First");
String temp = hm.put("A","Second");
System.out.println(temp); // prints first
0 голосов
/ 04 декабря 2018

Насколько я знаю, вы можете сделать это двумя способами:

  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");
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...