2013-09-27 2 views
0

Я не могу подтвердить это в документации, но если у меня есть LinkedHashMap и я вызываю keySet() на нем, и итерация по этому набору гарантирована для итерации в порядке ввода?LinkedHashMap итерации по клавишам

+0

Да, это гарантировано – Ilya

ответ

2

Да. Посмотреть документы (которые вы не можете видеть) здесь: http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

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

3

Это указано в Map документация:

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

Это означает, что для LinkedHashMap, все 3 метода - values(), keySet() и entrySet(), каждый из них, обеспечивая 3 различные точки зрения сбора, гарантированно итерацию в порядке вставки.

Смежные вопросы