我现在有了Map<String, List<String>> 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());
}OREO8.0的输出
D/Key : First
D/Key : Second输出(小于8.0 )
D/Key : Second
D/Key : First发布于 2018-03-26 12:51:30
我得到了一个解决方案,直到我们将集合定义为SortedSet,我们得到了不同顺序的密钥序列。
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (int i = 0; i < map.size(); i++) {
Log.d("key", keys.toArray()[i].toString());
}发布于 2018-03-26 13:10:04
您正在使用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发布于 2018-03-26 12:41:02
这与android操作系统无关。生成的Set of HashMap没有订单。然而,也有带有订单的Set,例如TreeSet。
https://stackoverflow.com/questions/49491651
复制相似问题