如何反向遍历链接哈希映射?

可能重复:
以相反的顺序迭代LinkedHashMap

如何以相反的顺序遍历链接的哈希映射? 地图中是否有任何预定义方法可以做到这一点?

我正在创建如下:

LinkedHashMap map = new LinkedHashMap(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); 

 List> list = new ArrayList<>(map.entries()); for( int i = list.size() -1; i >= 0 ; i --){ Entry entry = list.get(i); } 

不是很漂亮,并且以入口集的副本为代价,如果您的地图有大量条目可能是个问题。

[List.reverse(List<>)][2] Guava库有一个[List.reverse(List<>)][2] ,它允许你为每个样式循环而不是索引循环使用Java 5:

 //using guava for( Entry entry : Lists.reverse(list) ){ // much nicer } 

试试这个,它将以反向插入顺序打印

 ListIterator iter = new ArrayList<>(map.keySet()).listIterator(map.size()); while (iter.hasPrevious()) { Integer key = iter.previous(); System.out.println(key); } 

您还可以按条目的反向插入顺序进行迭代:

 ListIterator> iter = new ArrayList<>(map.entrySet()).listIterator(map.size()); while (iter.hasPrevious()) { Map.Entry entry = iter.previous(); System.out.println(entry.getKey() + ":" + entry.getValue()); } 

番石榴规则:

 List reverseList = Lists.reverse( Lists.newArrayList(map.keySet())); 

Lists.reverse