Java HashMap为列表的头部增加了价值

时间:2011-02-27 22:25:40

标签: java hashmap

我正在研究java HashMaps,并发现它将值添加到列表的头部。例如,

hm.put(麦克,2); hm.put(安德鲁,3);

现在,如果我使用迭代器打印hasmap,我会得到

andrew 3

迈克2

我希望以FIFO方式而不是LIFO方式添加项目......有没有办法做到这一点?

3 个答案:

答案 0 :(得分:7)

请尝试使用LinkedHashMap。我认为HashMaps不保证订单。

LinkedHashMap<String,String> lHashMap = new LinkedHashMap<String,String>();

    lHashMap.put("1", "One");
    lHashMap.put("2", "Two");
    lHashMap.put("3", "Three");

    Collection c = lHashMap.values();
    Iterator itr = c.iterator();

    while (itr.hasNext()){
      System.out.println(itr.next());
    }

输出

One
Two
Three

答案 1 :(得分:7)

Java中的Map抽象不适用于LIFO或FIFO的概念。这些概念主要适用于有序序列,而映射存储的顺序完全独立于插入值的orde,以便最大限度地提高效率。例如,HashMap使用散列来存储其值,散列函数随机散布其值越多,性能越好。类似地,TreeMap使用平衡的二叉搜索树,它以排序的顺序存储其值,以保证快速查找。

然而,Java确实有一个非常酷的类,叫做LinkedHashMap,我相信这正是你正在寻找的。它提供了HashMap的速度,同时保证了可预测的遍历顺序,该顺序由插入元素的顺序定义。

希望这有帮助!

答案 2 :(得分:1)

您想使用队列吗?

http://download.oracle.com/javase/6/docs/api/java/util/Queue.html

HashMaps没有排序,你从迭代器以“错误”顺序返回它们的事实只是关键是如何在键上发生散列。

您希望如何使用此数据结构?