LinkedHashMap сортируется по ключам

У меня есть LinkedHashMap это меняет порядок вставки, когда я получаю значения из него. Есть идеи почему?

private final Map<Long, DD> cachedPlansById=new LinkedHashMap<Long, DD>();
cachedPlansById.put(dd.getId(), dd);

Значения вне дао, когда вставляются в LinkesHashMap идти в этом порядке->

dao Spring  6
dao Fall  5
dao Annual  4
dao Spring 2010 3
dao Fall 2009 2
dao Annual 2010-2011 1

Но когда я получаю их из LinkedHashMap, они переупорядочены, как это->

valu Annual 2010-2011 1
valu Fall 2009 2
valu Spring 2010 3
valu Annual  4
valu Fall  5
valu Spring  6

Я использую это для цикла:

for (Map.Entry<Long, PaymentPlan> m:cachedPlansById.entrySet()){
        System.out.println("valu "+m.getValue().getName()+" "+m.getValue().getId());
}

1 ответ

Не могли бы вы предоставить нам кусок кода, в который вставлены ваши значения?

Потому что, как вы можете убедиться с этим небольшим примером, LinkedHashMap Итератор следует порядку вставки.

    Map<Long, String> cachedPlansById = new LinkedHashMap<Long, String>();
    cachedPlansById.put(6L, "Spring");
    cachedPlansById.put(5L, "Fall");
    for (Map.Entry<Long, String> m : cachedPlansById.entrySet()) {
        System.out.println(m.getValue() + " " + m.getKey());
    }

Результат:

Spring 6
Fall 5

Просто для информации, LinkedHashMap также имеет конструктор, в котором он следует порядку доступа вместо порядка вставки.

Предусмотрен специальный конструктор для создания связанной хэш-карты, порядок итераций которой соответствует порядку, в котором к ее элементам обращались в последний раз, от последнего к последнему доступу до самого последнего (порядок доступа). Этот вид карты хорошо подходит для создания LRU-кэшей. Вызов метода put или get приводит к доступу к соответствующей записи (при условии, что она существует после завершения вызова). Метод putAll генерирует один доступ к записи для каждого сопоставления в указанной карте в том порядке, в котором сопоставления ключ-значение предоставляются итератором набора записей указанной карты. Никакие другие методы не генерируют входы. В частности, операции над коллекциями-представлениями не влияют на порядок итерации карты поддержки.

Другие вопросы по тегам