Java HashMap и базовая коллекция значений () - PullRequest
3 голосов
/ 04 марта 2011

Мне было интересно, поддерживается ли упорядочение представления Collection значений, содержащихся в HashMap, при изменении HashMap.

Например, если у меня есть HashMap, метод values ​​() которого возвращает L = {a, b, c} Что случилось с L, если я добавил новый элемент "d" на карту?Добавляется ли он в конце, т.е. если я перебираю элементы, сохраняется ли порядок?

В частности, если добавление нового элемента "d" вызывает перефразировку, порядок будет сохранен в L?

Большое спасибо!

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

Мне было интересно, поддерживается ли упорядоченный вид значений, содержащихся в HashMap, при изменении HashMap.

Нет, такой гарантии нет.

Если это так, то следующая программа выдаст и упорядочит последовательность от 1 до 100

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

for (int i = 0; i < 100; i++)
    map.put(i, i);

System.out.println(map.values());

( и это не так) .

Существует класс, который делает именно то, что вы просите, и это LinkedHashMap:

Реализация хеш-таблицы и связанного списка интерфейса Map с предсказуемым порядком итераций. Эта реализация отличается от HashMap тем, что поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки).

1 голос
/ 04 марта 2011

Если это не сказано в JavaDoc, тогда нет никаких гарантий об этом.Разные версии Java могут делать разные вещи.Не зависит от недокументированного поведения.

Возможно, вы захотите взглянуть на LinkedHashMap .

0 голосов
/ 04 марта 2011

Обычно они не гарантируют порядок при использовании HashMap. Это может быть порядок, в котором вы добавляете элементы для нескольких элементов, но он будет перетасовываться, когда есть вероятность столкновения, и это должно идти в соответствии со стратегией разрешения столкновений.

0 голосов
/ 04 марта 2011

HashMap в Java не упорядочен , поэтому я думаю, что будет безопасно сказать, что values ​​() не вернет упорядоченную коллекцию.

LinkedHashMap является упорядоченной версией HashMap (порядок вставки), но я не знаю, что values ​​() вернет упорядоченную коллекцию.Я думаю, что лучше всего попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...