3

Map<String, List<String>> map现在将两个值放入 M​​ap 中,现在当从 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());
 }

奥利奥 8.0 的输出

D/Key : First
D/Key : Second

输出低于 8.0

D/Key : Second
D/Key : First
4

3 回答 3

1

我得到了一个解决方案,直到我们将 Set 定义为 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-26T12:51:30.953 回答
1

您正在使用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-26T13:10:04.470 回答
0

它与安卓操作系统无关。Set的结果HashMap没有顺序。但是有Sets 有一个命令,例如TreeSet

于 2018-03-26T12:41:02.847 回答