Рубрики
Без рубрики

Получите Первый ключ и значение Из хэш-карты

В этом уроке мы обсудим, как получить первую пару ключ-значение из хэш-карты, не зная ключа.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы обсудим, как получить первую пару ключ-значение из HashMap , не зная ключа.

Сначала мы будем использовать итератор, а затем поток, чтобы получить первую запись. Наконец, мы обсудим проблему, которую представляет HashMap , когда мы хотим получить первую запись, и как ее решить.

2. Использование итератора

Давайте рассмотрим, что у нас есть следующее HashMap<Целое число, строка> :

Map hashMap = new HashMap<>();
hashMap.put(5, "A");
hashMap.put(1, "B");
hashMap.put(2, "C");

В этом примере мы будем использовать итератор для получения первой пары ключ-значение. Итак, давайте создадим итератор в entryset из HashMap и вызовем метод next() для получения первой записи:

Iterator> iterator = hashMap.entrySet().iterator();

Map.Entry actualValue = iterator.next();
Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B");

assertEquals(expectedValue, actualValue);

3. Использование потока Java

Другой подход заключается в использовании API потока Java. Давайте создадим поток в наборе записей и вызовем метод findFirst () , чтобы получить его первую запись:

Map.Entry actualValue = hashMap.entrySet()
  .stream()
  .findFirst()
  .get();
Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B");

assertEquals(expectedValue, actualValue);

4. Проблема С Порядком Вставки

Чтобы представить эту проблему, давайте вспомним , как мы создали HashMap , пара 5=A была вставлена в качестве первой записи, затем 1=B и, наконец, 2=C . Давайте проверим это, распечатав содержимое нашего HashMap :

System.out.println(hashMap);
{1=B, 2=C, 5=A}

Как мы видим, порядок-это не одно и то же. Реализация класса HashMap не гарантирует порядок вставки .

Теперь давайте добавим еще один элемент в HashMap :

hashMap.put(0, "D");

Iterator> iterator = hashMap.entrySet().iterator();

Map.Entry actualValue = iterator.next();
Map.Entry expectedValue = new AbstractMap.SimpleEntry(0, "D");

assertEquals(expectedValue, actualValue);

Как мы видим, первая запись снова изменилась (в данном случае на 0=D ). Это также доказывает, что HashMap не гарантирует порядок вставки.

Итак, если мы хотим сохранить порядок, мы должны использовать LinkedHashMap вместо :

Map linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put(5, "A");
linkedHashMap.put(1, "B");
linkedHashMap.put(2, "C");
linkedHashMap.put(0, "D");

Iterator> iterator = linkedHashMap.entrySet().iterator();
Map.Entry actualValue = iterator.next();
Map.Entry expectedValue = new AbstractMap.SimpleEntry(5, "A");

assertEquals(expectedValue, actualValue);

5. Заключение

В этой короткой статье мы обсудили различные подходы к получению первой записи из HashMap .

Наиболее важным моментом, который следует отметить, является то, что реализация HashMap не гарантирует никакого порядка вставки. Поэтому, если мы заинтересованы в сохранении порядка вставки, мы должны использовать LinkedHashMap .

Пример кода доступен на GitHub .