List排序、Map按照value值排序,以及list如何转换为map,map如何转换为list
在写算法的时候,会频繁的用到list以及map的排序问题,当我们想对list进行排序,我们可以直接使用Collections类中的方法,比如说对list进行降序排列,如下
Collections.sort(list,Collections.reverseOrder());
其中逗号前的list即为要排序的list,用一个例子来看,如图:
list.add(0.3);
list.add(0.4);
list.add(0.5);
list.add(0.6);
list.add(0.7);
System.out.println(list);
Collections.sort(list,Collections.reverseOrder());
初始化不在这里定义了,运行结果如图:
同样,升序可以使用:
Collections.sort(list);
接下来是对map按照value值进行排序(降序),主要是先将map转化为list,再通过Collections类中的方法进行排序,代码如下:
List<Map.Entry<String, Double>> wordMap = new ArrayList<Map.Entry<String, Double>>(structureSimilarityDegree.entrySet());
Collections.sort(wordMap, new Comparator<Map.Entry<String, Double>>() {//根据value排序
public int compare(Map.Entry<String, Double> o1,
Map.Entry<String, Double> o2) {
double result = o2.getValue() - o1.getValue();
if(result > 0)
return -1;
else if(result == 0)
return 0;
else
return -1;
}
})
举例子进行验证:
structureSimilarityDegree.put( list.get(0)+ "," , 0.93);
structureSimilarityDegree.put( list.get(2)+ "," , 0.98);
structureSimilarityDegree.put( list.get(3)+ "," , 0.99);
structureSimilarityDegree.put( list.get(1)+ "," , 0.97);
运行结果如图:
正确运行,不过要注意的是,转换完之后为list类型,而不是map。如果我们想要用map进行操作,就需要将list类型转换为map类型,我通过使用迭代器,将list转换为map,代码如下:
Map sortedMap = new LinkedHashMap();
for (Iterator it = wordMap.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
这样就将list成功转换为map,图中的sortedMap为转换后的map可以直接使用。