我有HashMAp
items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
我需要每个人最后一次。
"C", "3"
"B", "2"
"A", "1"
答案 0 :(得分:6)
您可以使用NavigableMap
(TreeMap
是NavigableMap
),这是一个具有导航功能的SortedMap
。
NavigableMap#descendingMap()
返回此地图中包含的映射的逆序视图(不是副本)。
示例:
NavigableMap<String, String> items = new TreeMap<String, String>();
items.put("B", "2");
items.put("A", "1");
items.put("C", "3");
for (Map.Entry<String, String> e : items.entrySet()) {
System.out.println(e);
}
// gives
// A=1
// B=2
// C=3
for (Map.Entry<String, String> e : items.descendingMap().entrySet()) {
System.out.println(e);
}
// gives
// C=3
// B=2
// A=1
注意:如果您关心Map
中密钥的自然排序,此答案有效。如果您关心插入顺序或访问顺序,请查看LinkedHashMap
。
注意2:在您的问题中,您使用了HashMap
。请注意HashMap
不保证其元素的任何订单。实际上,它甚至不能保证订单会随着时间的推移保持不变。请参阅HashMap
的{{3}}的第一段以获取进一步的参考。
答案 1 :(得分:4)
如果您的意思是按键顺序,请按以下步骤操作:
使用有序的Map,如TreeMap,然后迭代items.keySet()。
TreeMap按键值的自然顺序排序,因此您需要将比较器传递给构造函数,以便按相反的顺序对键进行排序:
Map<String, String> items = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String a, String b) {
return b.compareTo(a);
}
});
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
for (String s: items.keySet()) {
System.out.println(s + " " + items.get(s));
}
答案 2 :(得分:1)
HashMap不保证任何订购。如果你使用LinkedHashMap
,它将按插入顺序排列,但仍然没有方便的方法可以倒退。
一种方法是致电items.entrySet()
。返回Set<Map.Entry>
。然后,您可以获取集合的大小,调用toArray()
,然后执行降序循环。
答案 3 :(得分:0)
另一种方法 - 创建密钥的SortedSet:
import java.util.*;
class MyComparator implements Comparator<String> {
public int compare(String a, String b) {
return -a.compareTo(b);
}
public boolean equals(String a, String b) {
return a.equals(b);
}
}
public class test {
public static void main(String[] args) {
HashMap<String, String> items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
TreeSet<String> ts = new TreeSet<String>(new MyComparator());
ts.addAll(items.keySet());
for(Iterator<String> i = ts.iterator(); i.hasNext(); ) {
String key = i.next();
System.out.println("key: " + key + ", value: " + items.get(key));
}
}
}
<强>输出:强>
key: C, value: 3 key: B, value: 2 key: A, value: 1