[英]HashMap where the order of keys is important
我使用 HashMaps 來存儲對的集合,但我還必須確保從第一個 json 序列化(來自 Php 客戶端)到 Java HashMap 集合瀏覽,鍵的順序將是相同的
//import com.google.gson.Gson;
//import com.google.common.base.Joiner;
String s = "{\"durant\":\"kevin\", \"james\":\"lebron\",\"harden\":\"james\",\"westbrook\":\"russel\"}";
System.out.println(s);
Gson gson = new Gson();
Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> m = gson.fromJson(s, typeOfMap);
List<String> entries = new ArrayList< String>(m.keySet());
//Collections.sort(entries);
System.out.println(entries);
System.out.println(m.entrySet());
System.out.println( Joiner.on(",").withKeyValueSeparator("").join(m) );
它似乎適用於一小組值,無需再次排序(此處按字母順序排列),但這是一種可靠的方法嗎? json String 和 Map 瀏覽之間的順序可以改變嗎?
編輯:可能 LinkedHashMap 更能保留順序?
LinkedHashMap
維護插入順序。 除此之外,還有各種SortedMap
實現,例如TreeMap
。
您可以在 SO 上查看這個問題: Java 如何對 HashMap 或 HashTable 中的項目進行排序?
可以給你更清晰的圖...
從該圖表中,您可以看到與 Java 11 捆綁在一起的Map
的各種實現之間的不同行為。請注意“迭代順序”列。
如果您希望地圖根據鍵的值進行排序來維護順序,請使用實現SortedMap
或其后繼NavigableMap
。 這意味着TreeMap
,或者如果您需要並發, ConcurrentSkipListMap
。
如果要保持原始插入順序,請使用LinkedHashMap
。
如果您將枚舉對象作為鍵,請使用EnumMap
來維護鍵,以便定義枚舉。
與 Java 11 捆綁在一起的所有其他Map
實現都沒有承諾鍵的順序,因此請避免使用它們。 您還可以考慮使用Map
3rd 方實現,例如在Google Guava庫中找到的那些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.