Интерфейс Map предоставляет три вида представлений. представления коллекции, которые позволяют рассматривать содержимое карты как набор ключей, коллекцию значений или набор сопоставлений ключ-значение. Порядок порядок в карты определяется как порядок, в котором итераторы коллекции карты возвращают свои элементы. Некоторые карты реализации, такие как
TreeMap
класс, дают конкретные гарантии относительно их порядка; другие, такие какHashMap
, не делают этого.
-- Map
Этот связный список определяет итерационное порядок, который обычно является порядком в котором ключи были вставлены в map (insertion-order).
Итак, да, keySet()
, values()
и entrySet()
(три упомянутых представления коллекции) возвращают значения в порядке, который использует внутренний связный список. И да, JavaDoc для Map
и LinkedHashMap
гарантируют это.
В этом, в конце концов, и заключается смысл этого класса.
AFAIK это не документировано, поэтому вы не можете "формально" так считать. Однако маловероятно, что текущая реализация изменится.
Если вы хотите обеспечить порядок, вы можете перебрать все записи карты и вставить их в отсортированный набор с функцией упорядочивания по вашему выбору, хотя при этом вы, естественно, будете платить за производительность.
Можно предположить, что это так. В Javadoc говорится о "предсказуемом порядке итераций", а единственными итераторами, доступными в Map, являются итераторы для keySet(), entrySet() и values().
Так что в отсутствие дальнейших оговорок очевидно, что он предназначен для применения ко всем этим итераторам.
Если посмотреть на источник, то похоже, что это так. keySet()
, values()
, и entrySet()
все используют один и тот же итератор записей.
Если посмотреть на интерфейс, то он возвращает обычное Set
, а не SortedSet
. Поэтому нет никаких гарантий.
Прежде чем предполагать неявные гарантии, глядя на реализацию (всегда плохая идея), посмотрите также на реализацию во всех других реализациях Java :)
Лучше создать, например, TreeSet с keySet в конструкторе.