Map.keySet() 读取序列?
Map.keySet() read sequence?
我现在有 Map<String, List<String>> map
,将两个值放在 Map 中,现在当从 map 读取键集时,在不同的设备中以不同的顺序给出。
private Map<String, List<String>> map = new HashMap<>();
map.put("First", new ArrayList<String>());
map.put("Second", new ArrayList<String>());
现在,从这张地图上读取钥匙。
Set<String> keys = map.keySet();
for (int i = 0; i < map.size(); i++) {
Log.d("key", keys.toArray()[i].toString());
}
OREO 8.0 中的输出
D/Key : First
D/Key : Second
输出低于 8.0
D/Key : Second
D/Key : First
与androidOS无关。 HashMap
的结果 Set
没有顺序。但是,有 Set
个订单,例如TreeSet
。
我找到了一个解决方案,直到我们将 Set 定义为 SortedSet,我们以不同的顺序获得键序列。
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (int i = 0; i < map.size(); i++) {
Log.d("key", keys.toArray()[i].toString());
}
您正在使用 HashMap
作为数据结构。与在 HashMap
中一样,插入顺序没有保持不变,因此您得到的是随机顺序的键。如果要保持插入顺序,只需使用LinkedHashMap
。您放置数据的顺序保持不变,您可以简单地对其进行迭代。
LinkedHashMap
的示例代码:
Map<String, String> map = new LinkedHashMap<>();
map.put("key1", "value2");
map.put("key3", "value4");
map.put("key5", "value6");
map.put("key7", "value8");
Set<String> keySet = map.keySet();
for(String st: keySet){
System.out.println(st);
}
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
输出:
key1
key3
key5
key7
key1 value2
key3 value4
key5 value6
key7 value8
我现在有 Map<String, List<String>> map
,将两个值放在 Map 中,现在当从 map 读取键集时,在不同的设备中以不同的顺序给出。
private Map<String, List<String>> map = new HashMap<>();
map.put("First", new ArrayList<String>());
map.put("Second", new ArrayList<String>());
现在,从这张地图上读取钥匙。
Set<String> keys = map.keySet();
for (int i = 0; i < map.size(); i++) {
Log.d("key", keys.toArray()[i].toString());
}
OREO 8.0 中的输出
D/Key : First
D/Key : Second
输出低于 8.0
D/Key : Second
D/Key : First
与androidOS无关。 HashMap
的结果 Set
没有顺序。但是,有 Set
个订单,例如TreeSet
。
我找到了一个解决方案,直到我们将 Set 定义为 SortedSet,我们以不同的顺序获得键序列。
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (int i = 0; i < map.size(); i++) {
Log.d("key", keys.toArray()[i].toString());
}
您正在使用 HashMap
作为数据结构。与在 HashMap
中一样,插入顺序没有保持不变,因此您得到的是随机顺序的键。如果要保持插入顺序,只需使用LinkedHashMap
。您放置数据的顺序保持不变,您可以简单地对其进行迭代。
LinkedHashMap
的示例代码:
Map<String, String> map = new LinkedHashMap<>();
map.put("key1", "value2");
map.put("key3", "value4");
map.put("key5", "value6");
map.put("key7", "value8");
Set<String> keySet = map.keySet();
for(String st: keySet){
System.out.println(st);
}
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey() + " " + entry.getValue());
}
输出:
key1
key3
key5
key7
key1 value2
key3 value4
key5 value6
key7 value8