當前位置:成語大全網 - 書法字典 - HashMap的遍歷是否有序;以及fastJson.toJson()是否可以保證結果的順序相同。

HashMap的遍歷是否有序;以及fastJson.toJson()是否可以保證結果的順序相同。

首先,結果:無法保證壹致性。

Hashmap基於數組加鏈表結構保存數據,遍歷時基本可以視為通過hashCode進行遍歷。

但是有兩個特殊點:

①:初始化hashmap時,如果指定的hash桶數(小於16)不壹致,則(n-1)&;哈希得到的數組下標不壹致。遍歷的順序將會改變。

②:發生哈希沖突,同時沖突鏈表的長度小於9。哈希桶容量大於64;此時根據鏈表存儲,這部分數據遍歷可能是基於插入順序。(有待核實)

示例1:

HashMap map 1 = new HashMap & lt;& gt();

map 1 . put(“123“,“AAA“);

map 1 . put(“23456“,“BBB“);

系統。out . println(“map 1的循環遍歷“);

供(圖。entry entry:map 1 . entry set()){

system . out . println(entry . getkey());

}

HashMap map2 = new HashMap & lt& gt(map 1 . size());

map 2 . put(“123“,“AAA“);

map 2 . put(“23456“,“BBB“);

系統。out . println(“map 2的循環遍歷“);

供(圖。Entry條目:map 2 . entry set()){

system . out . println(entry . getkey());

}

回到第二個問題:fastJson.toJson()?基於以上兩個隱患,秩序就沒有保障了嗎?JSONObject基於Map.entrySet()遍歷Map,而entrySet通過bucket 0節點循環遍歷數組和鏈表,此時的數據無法保證完全壹致。