【问题标题】:how to get keys in Map with same sequence as they were inserted如何以与插入时相同的顺序获取 Map 中的键
【发布时间】:2011-06-16 11:55:40
【问题描述】:

我正在尝试将一些键值放入 M​​ap 并尝试以与插入它们相同的顺序检索它们。例如下面是我的代码

import java.util.*;
import java.util.Map.Entry;

public class HashMaptoArrayExample {

    public static void main(String args[])

    {
   Map<String,Integer> map=  new HashMap<String,Integer>();

   // put some values into map

   map.put("first",1);
   map.put("second",2);
   map.put("third",3);
   map.put("fourth",4);
   map.put("fifth",5);
   map.put("sixth",6);
   map.put("seventh",7);
   map.put("eighth",8);
   map.put("ninth",9);



    Iterator iterator= map.entrySet().iterator();
       while(iterator.hasNext())
       {
           Entry entry =(Entry)iterator.next();   
           System.out.println(" entries= "+entry.getKey().toString());
       }

    }
}

我想检索如下密钥

first second third fourth fifth sixth .....

但它在我的输出中以如下随机顺序显示

OUTPUT

ninth eigth fifth first sixth seventh third fourth second

【问题讨论】:

  • @bestsss:我采取相反的方法:使用满足您要求的最简单的类型。除非您需要维护插入顺序,否则为什么要使用更复杂(且成本更高)的类型?绝大多数时候,HashMap 对我来说都很好。它完全按照罐头上说的做,仅此而已 - 你为什么这么不喜欢它?
  • @bestsss:相反,我相对很少迭代地图——我更有可能只使用它来获取/放置。更重要的是,当我使用HashMap 而不是LinkedHashMap 时,我实际上是在表达我不关心订购的事实。
  • @bestsss: 是的,但是 IdentityHashMap 在行为方面通常不是您想要的 ;) 我个人对 Java 中的地图类的主要不满是没有 .NET 的 @987654328 等价物@ 它可以让你概括相等关系。
  • @bestsss:也许我们编写的应用程序非常不同 :) 我喜欢使用最适合我实际需求的类型。使用功能更全面的类型表明我可能需要那些额外的功能...当我以后的需求扩展时,这会使我更难找到不同的类型。

标签: java


【解决方案1】:

HashMap 是一个哈希表。这意味着插入密钥的顺序无关紧要,因为它们不是按此顺序存储的。在您插入另一个密钥的那一刻,有关最后一个密钥的信息就会被遗忘。

如果要记住插入顺序,则需要使用不同的数据结构。

【讨论】:

  • @Imray 看看 Jon 的回答。
【解决方案2】:

您不能对HashMap 执行此操作,因为它不会在其数据中的任何位置维护插入顺序。看看LinkedHashMap,它的设计正是为了维持这种秩序。

【讨论】:

  • 非常感谢。效果很好。最后一个问题。而不是使用 iterator.hasNext() 我可以使用高级 for 循环
  • @Sukumar:当然:for (Map.Entry&lt;..,..&gt; entry : map.entrySet()) { ... }.
  • 确定可以(对于 x : y)被有效地编译为迭代器;有下一个(),下一个()
  • 非常感谢大家。这对我很有帮助。
  • LinkedHashMap 没有获取特定索引的方法。就我而言,我想插入最后一个数字。任何现有的 DataStructures 都可以做到这一点吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 2019-12-16
  • 2014-07-28
  • 1970-01-01
相关资源
最近更新 更多