迭代如何在HashMap中排在第一位?

Med*_*tor 6 java

我有HashMAp

 items = new HashMap<String, String>();
        items.put("A", "1");
        items.put("B", "2");
        items.put("C", "3");
Run Code Online (Sandbox Code Playgroud)

我需要每个最后一个.

"C", "3"
"B", "2"
"A", "1"
Run Code Online (Sandbox Code Playgroud)

bar*_*jak 6

您可以使用NavigableMap(TreeMap是a 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
Run Code Online (Sandbox Code Playgroud)

注意:如果你关心你的钥匙的自然顺序,这个答案是有效的Map.如果您关心插入订单或访问顺序,请查看LinkedHashMap.

注2:在你的问题中,你用了一个HashMap.请注意,HashMap不保证其元素的任何订单.实际上,它甚至不能保证订单会随着时间的推移保持不变.见第一段HashMapjavadoc的进一步引用.


ift*_*itz 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));
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码等效于:`Map&lt;String, String&gt; items = new TreeMap&lt;String, String&gt;(Collections.reverseOrder());` (3认同)