我插入一个排序对象到HashMap,但它没有得到排序。
Map<Long, Object> sortedObject = new HashMap(Long, Object>();
for(Object sortedObject : sortedObjectList)
{
sortedMap.put(sortedObject.getId(), sortedObject);
}
syso(new Gson().toJson(sortedMap);
在输出中,我期待排序映射,但它是随机的。请帮助。
Hashmap
是无序的。使用Treemap
排序。试试这个:
Map<Long, Object> sortedObject = new HashMap<Long, Object>();
for(Object sortedObject : sortedObjectList)
{
sortedMap.put(sortedObject.getId(), sortedObject);
}
System.out.println("Unsort Map......");
System.out.println(new Gson().toJson(sortedMap);
System.out.println("Sorted Map......");
Map<String, String> treeMap = new TreeMap<String, String>(sortedMap);
System.out.println(new Gson().toJson(treeMap);
TreeMap是一个SortedMap
的例子,这意味着键的顺序可以排序,当迭代键时,你可以期望它们是有序的。
HashMap不做这样的保证。因此,当迭代HashMap的键时,您无法确定它们的顺序。
HashMap通常会更高效,所以当你不关心键的顺序时就使用它。
HashMap
指定为O(1)
:"假设哈希函数将元素适当地分散到桶中,基本操作(get和put)的恒定时间性能"。TreeMap
指定为保证log(n)
的时间开销,用于containsKey, get, put和remove操作。查看我分享的Javadocs以了解更多细节。
HashMap
没有排序,它以键值对存储。