我有一个LinkedHashMap,当我从中获取值时,它会反转插入顺序。有什么想法吗?

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


当插入LinkesHashMap时,值出到dao的顺序为->

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());
}

最佳答案

您能否提供插入您的值的代码段给我们?

正如您可以通过这个小例子验证的那样,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方法为每个生成一个条目访问
  按键值映射的顺序在指定映射中进行映射
  由指定地图的条目集迭代器提供。没有其他方法
  生成条目访问。特别是对集合视图的操作
  不会影响背景图的迭代顺序。

关于java - LinkedHashMap按键排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25791820/

10-10 03:24