我正在研究java HashMaps,并发现它将值添加到列表的头部。例如,
hm.put(麦克,2); hm.put(安德鲁,3);
现在,如果我使用迭代器打印hasmap,我会得到
andrew 3
迈克2
我希望以FIFO方式而不是LIFO方式添加项目......有没有办法做到这一点?
答案 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没有排序,你从迭代器以“错误”顺序返回它们的事实只是关键是如何在键上发生散列。
您希望如何使用此数据结构?