Map.keySet()读取序列?

时间:2018-03-26 12:36:29

标签: java android hashmap android-8.0-oreo keyset

我现在有from ... import ...,将两个值放在Map中,现在当map中的keyset在不同的设备中以不同的顺序给出时。

Map<String, List<String>> map

现在,从此地图中读取密钥。

private Map<String, List<String>>  map = new HashMap<>();

map.put("First", new ArrayList<String>());
map.put("Second", new ArrayList<String>());

输入OREO 8.0

 Set<String> keys = map.keySet();

 for (int i = 0; i < map.size(); i++) {
     Log.d("key", keys.toArray()[i].toString());
 }

OUTPUT in BELOW 8.0

D/Key : First
D/Key : Second

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

它与Android操作系统无关。生成的Set HashMap没有订单。但是,有Set个订单,例如TreeSet

答案 2 :(得分:0)

我得到了一个解决方案,直到我们定义了Set as SortedSet,我们得到了不同顺序的键序列。

SortedSet<String> keys =  new TreeSet<>(map.keySet());

for (int i = 0; i < map.size(); i++) {
    Log.d("key", keys.toArray()[i].toString());            
}