我有这样的代码:
HashMap<Long, TempPosition> positions = getTempPositions();
for (SortedMap.Entry<Long, TempPosition> p: positions.entrySet()) {...}
问题是“位置”未排序或无效排序。迭代hashmap并保存当前顺序的最简单方法是什么?
谢谢
答案 0 :(得分:9)
根据定义,HashMap
没有订单。如果您需要保留或创建某种订单,则需要使用TreeMap
代替HashMap
。
答案 1 :(得分:4)
HashMap没有任何订单。如果需要插入顺序,请使用LinkedHashMap。如果要使用自然顺序或自定义比较器对键进行排序,请使用TreeMap。
答案 2 :(得分:4)
HashMap没有订单。你甚至不能保证具有相同键的两个HashMaps具有相同的顺序。
如果您想要使用TreeMap
或LinkedHashMap
的订单,迭代器将按照集合提供的顺序。
注意:在某些情况下,密钥会被排序,因此密钥甚至不是随机的。
HashMap<Integer, String> map = new HashMap<>();
for(int i=0;i<10;i++)
map.put(i, ""+i);
System.out.println(map.keySet());
打印
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 3 :(得分:1)
您可以使用java.util.SortedMap的实现,例如java.util.TreeMap而不是HashMap。
答案 4 :(得分:1)
SortedSet<String> sortedset= new TreeSet<String>(positions.keySet());
Iterator<String> it = sortedset.iterator();
while (it.hasNext()) {
System.out.println (it.next());
}
答案 5 :(得分:1)
由于密钥可以排序,这种方法最简单:
HashMap<Long, TempPosition> positions = getTempPositions();
for (Map.Entry<Long, TempPosition> p:
new TreeMap<Long, TempPosition>( positions ).entrySet()) {...}
诀窍是将地图包裹在TreeMap
中。请注意,如果地图很大,这不起作用。
答案 6 :(得分:1)
这里有使用流和经典foreach循环的示例代码:
HashMap<String,String> map = new HashMap<>();
map.put("c", "C");
map.put("a", "A");
map.put("b", "B");
for (Map.Entry<String,String> e : (Iterable<Map.Entry<String,String>>) map.entrySet().stream().sorted(Map.Entry.comparingByKey())::iterator) {
System.out.println("key:" + e.getKey() + ", val: " + e.getValue());
}