首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedHashMap按键排序

LinkedHashMap按键排序
EN

Stack Overflow用户
提问于 2014-09-11 23:44:15
回答 1查看 88关注 0票数 1

我有一个LinkedHashMap,当我从它获取值时,它会颠倒插入的顺序。你知道为什么吗?

代码语言:javascript
复制
private final Map<Long, DD> cachedPlansById=new LinkedHashMap<Long, DD>();
cachedPlansById.put(dd.getId(), dd);

在插入到LinkesHashMap中时,dao外部的值将按以下顺序执行->

代码语言:javascript
复制
dao Spring  6
dao Fall  5
dao Annual  4
dao Spring 2010 3
dao Fall 2009 2
dao Annual 2010-2011 1

但是当我从LinkedHashMap中检索它们时,它们会像这样重新排序->

代码语言:javascript
复制
valu Annual 2010-2011 1
valu Fall 2009 2
valu Spring 2010 3
valu Annual  4
valu Fall  5
valu Spring  6

我使用这个for循环:

代码语言:javascript
复制
for (Map.Entry<Long, PaymentPlan> m:cachedPlansById.entrySet()){
        System.out.println("valu "+m.getValue().getName()+" "+m.getValue().getId());
}
EN

回答 1

Stack Overflow用户

发布于 2014-09-11 23:56:24

你能给我们提供插入你的值的那段代码吗?

因为正如您可以通过这个小示例验证的那样,LinkedHashMap迭代器遵循插入顺序。

代码语言:javascript
复制
    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());
    }

结果是:

代码语言:javascript
复制
Spring 6
Fall 5

仅供参考,LinkedHashMap还有一个构造函数,它遵循访问顺序而不是插入顺序。

提供了一个特殊的构造函数来创建一个链接的散列映射,它的迭代顺序是其条目最后一次被访问的顺序,从最近访问的次数到最近访问的次数(访问顺序)。这种映射非常适合构建LRU缓存。调用put或get方法会导致对相应条目的访问(假设它在调用完成后存在)。putAll方法按照指定映射的条目集迭代器提供键-值映射的顺序,为指定映射中的每个映射生成一个条目访问。其他方法都不会生成入口访问。特别是,对集合视图的操作不会影响支持映射的迭代顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25791820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档