为什么给HashMap进行了排序,存放到新的HashMap中的时候依旧无视排序,应该如何处理?
在上一篇文章中,我们对map中的数据按照value值,进行排序,但是当我们想将排序后的HashMap,存放到新的HashMap中的时候,却发现,新的HashMap依旧无视排序,这里给出解决方法。
**这种问题出现的原因就是由于HashMap的无序性,无论是否已经排序,当放到HashMap中时,都会无序化,因此会出现这种问题,因此这时我们需要使用LinkedHashMap来解决,而不是HashMap。**举个例子来说,假设要创建一个map,定义如下:
private static Map<String,List<Map<String,Double>>> No;
Map中的key为String,value值为一个list,list中还存储一个Map,我们要对list中的map按照value值排序,之后放到最开始的Map中。
Map中转换为list排序的具体代码已经在上一篇文章中给出,如果我们使用HashMap,运行结果如下:
Map sortedMap = new HashMap();
for (Iterator it = wordMap.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
这时候我们发现,Map进行了排序,存放到新的HashMap中的时候依旧无视排序,解决方法就是使用LinkedHashMap。
代码修改如下:
Map sortedMap = new LinkedHashMap();
for (Iterator it = wordMap.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
再次运行,结果如下:
结果正确,解决问题。