如何排序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
,它将定义键的顺序。
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
,它将定义键的顺序。