作者:手机用户2602917083 | 来源:互联网 | 2022-12-21 08:05
我有一个树形图:
private Map dataMap = new TreeMap();
后来在代码中我有以下部分:
for (String item : data) {
JSONObject itemJson = new JSONObject(item);
System.out.println("-- before " + itemJson.getString("dataLabel") + " " + itemJson.getInt("dataValue"));
dataMap.put(itemJson.getString("dataLabel"), itemJson.getInt("dataValue"));
}
for(String data : dataMap.keySet()) {
System.out.println("-- after " + data);
}
第一个循环显示已排序的元素,例如:
-- before January 1
-- before February 2
-- before March 3
-- before April 4
.
.
.
但第二个循环混合顺序:
-- after April
-- after February
-- after January
-- after March
.
.
.
为什么这样?以及如何在第二个循环中获得排序结果?通过排序我的意思是与我在第一个循环中添加它们时的顺序相同?谢谢
1> Luiggi Mendo..:
TreeMap
按键排序条目,而不是按值排序.从文档(强调我的):
基于红黑树的NavigableMap实现.地图根据其键的自然顺序(这是您的情况)进行排序,或者由地图创建时提供的比较器排序,具体取决于使用的构造函数.
输出正确,因为字符串按字母顺序排序.
如何在第二个循环中获得排序结果?通过排序我的意思是与我在第一个循环中添加它们时的顺序相同?
使用LinkedHashMap
替代,因为根据插入的顺序存储条目.从文档(强调我的):
Map接口的哈希表和链表实现,具有可预测的迭代顺序.此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序).请注意,如果将键重新插入地图,则插入顺序不会受到影响.