2011-02-27 70 views
2

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

hm.put(mike,2); hm.put(andrew,3);

现在,如果我用iterator打印hasmap,我得到

安德鲁3

麦克2

我想在FIFO的方式,而不是LIFO方式要添加的项目...有没有办法做到这一点?

+0

'Map'(和一般的散列结构)不是'List',请检查接口规范。如果你想订购,你需要一些特定的东西。 – andersoj 2011-02-27 22:43:08

回答

7

Java中的地图抽象不LIFO或FIFO的概念发挥出色。这些概念主要适用于有序序列,而地图则按照完全独立于插入值的orde的顺序进行存储,以最大限度地提高效率。例如,HashMap使用散列来存储它的值,并且散列函数越是随机地散布其值,性能越好。同样,TreeMap使用平衡二叉搜索树,它按照排序顺序存储其值,以保证快速查找。

但是,Java确实有一个非常酷的类,名为LinkedHashMap,我相信它正是您正在寻找的。它提供了HashMap的速度,同时保证了可插入元素的顺序所定义的可预测的遍历顺序。

希望这会有所帮助!

+0

非常感谢。我会尝试使用linkedHashMap – CuriousCoder 2011-02-27 22:34:45

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 
+0

'HashMap'和'Hashtable'不保证排序。 – 2011-02-28 01:23:56

+0

同意。 LinkedHashMap == HashMap + LinkedList – 2011-02-28 01:36:08

+0

@卢声远LinkedHashMap不是列表 – 2011-03-18 00:44:54