我正在研究java HashMaps,并发现它将值添加到列表的头部。例如,Java HashMap将值添加到列表的头部
hm.put(mike,2); hm.put(andrew,3);
现在,如果我用iterator打印hasmap,我得到
安德鲁3
麦克2
我想在FIFO的方式,而不是LIFO方式要添加的项目...有没有办法做到这一点?
我正在研究java HashMaps,并发现它将值添加到列表的头部。例如,Java HashMap将值添加到列表的头部
hm.put(mike,2); hm.put(andrew,3);
现在,如果我用iterator打印hasmap,我得到
安德鲁3
麦克2
我想在FIFO的方式,而不是LIFO方式要添加的项目...有没有办法做到这一点?
Java中的地图抽象不LIFO或FIFO的概念发挥出色。这些概念主要适用于有序序列,而地图则按照完全独立于插入值的orde的顺序进行存储,以最大限度地提高效率。例如,HashMap使用散列来存储它的值,并且散列函数越是随机地散布其值,性能越好。同样,TreeMap使用平衡二叉搜索树,它按照排序顺序存储其值,以保证快速查找。
但是,Java确实有一个非常酷的类,名为LinkedHashMap,我相信它正是您正在寻找的。它提供了HashMap的速度,同时保证了可插入元素的顺序所定义的可预测的遍历顺序。
希望这会有所帮助!
非常感谢。我会尝试使用linkedHashMap – CuriousCoder 2011-02-27 22:34:45
你想使用队列吗?
http://download.oracle.com/javase/6/docs/api/java/util/Queue.html
包含HashMap是无序的,你是让他们从“错误”的顺序迭代器返回的其实只是如何散列法的关键发生的事情功能。
您希望如何特别使用此数据结构?
尝试使用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
'HashMap'和'Hashtable'不保证排序。 – 2011-02-28 01:23:56
同意。 LinkedHashMap == HashMap + LinkedList – 2011-02-28 01:36:08
@卢声远LinkedHashMap不是列表 – 2011-03-18 00:44:54
'Map'(和一般的散列结构)不是'List',请检查接口规范。如果你想订购,你需要一些特定的东西。 – andersoj 2011-02-27 22:43:08