LinkedHashMap按键排序

时间:2014-09-11 15:44:15

标签: java collections linkedhashmap

我有一个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中取出它们时,它们会像这样重新排序 - &gt;

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 个答案:

答案 0 :(得分:2)

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

因为您可以使用这个小例子来验证,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方法为每个方法生成一个条目访问权限   映射在指定的映射中,按键值映射的顺序   由指定的map的条目集迭代器提供。没有其他方法   生成入口访问。特别是对集合视图的操作   不影响支持映射的迭代顺序。