Не путайте с LinkedHashMap.keySet()
и LinkedHashMap.entrySet()
, возвращающими Set, и, следовательно, это не должно гарантировать заказ!
Set
- это интерфейс с HashSet
, TreeSet
и т. Д., Являющимися его реализациями. HashSet
реализация интерфейса Set
не гарантирует порядок. Но TreeSet
делает. Также LinkedHashSet
делает.
Следовательно, от того, как Set
был реализован в LinkedHashMap
, зависит, будет ли возвращаемая ссылка Set гарантировать порядок или нет.
Я прошел исходный код LinkedHashMap
, это выглядит так:
private final class KeySet extends AbstractSet<K> {...}
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {...}
Таким образом, LinkedHashMap / HashMap имеет собственную реализацию Set
, т.е. KeySet
. Таким образом, не путайте это с HashSet
.
Кроме того, порядок поддерживается тем, как элементы вставляются в ведро. Посмотрите на метод addEntry(..)
для LinkedHashMap
и сравните его с методом HashMap
, который подчеркивает основное различие между HashMap
и LinkedHashMap
.