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 генерирует один доступ к записи для каждого сопоставления в указанной карте в том порядке, в котором сопоставления ключ-значение предоставляются итератором набора записей указанной карты. Никакие другие методы не генерируют входы. В частности, операции над коллекциями-представлениями не влияют на порядок итерации карты поддержки.