如何排序Java中map.keySet()的顺序?

How to sort order of map.keySet() in Java?

public class MapKeyExample {
    public static void main(String[] args){

        //Initializing a Map of type HashMap
        Map<Integer, String> map = new HashMap<>();
        Set<Integer> s = new HashSet<>();
        map.put(1, "One");
        map.put(3, "Three");
        map.put(5, "Five");
        map.put(7, "Seven");
        map.put(9, "Nine");
        System.out.println(map);
        s = map.keySet();
        System.out.println(s);
    }
}

现在输出是

{1=One, 3=Three, 5=Five, 7=Seven, 9=Nine}
[1, 3, 5, 7, 9]

s 的预期输出是:

[1, 5, 3, 9, 7]

有人可以告诉我如何将其修改为 Linkedhashmap 或 treemap 吗?非常感谢。

大多数地图类型的键顺序未定义。 TreeMap 支持键排序。在您的情况下,默认顺序(Integer 的自然顺序)就足够了。要生成您自己的订单,请实施相应的比较器。

public class MyComparator implements Comparator<Integer> {
    public int compare(Integer i1, Integer i2) {
        ...
        // If i1 should be before i2, return -1
        // If i1 should be after i2, return 1
        // Otherwise return 0
    }
}

你说的 "change it to the order I want" 的意思不是很清楚。

但是,Java 提供了这些选项:

  • LinkedHashMap 可以按照您插入条目的相同顺序迭代。
  • TreeMap 的构造函数允许您提供一个 Comparator,它将定义键的顺序。