为什么arrayList即使在使用集合之后也不能在java中排序。反向
我试图根据hashmap的值对其进行排序
我这样做的方式是将hashmap的键集和值集分离为两个arrayList ,然后分别对列表进行排序,然后在一些比较操作之后将值添加到新的haspMap中 但出于某种原因,我收集了一些东西。反向(列表),不按降序对列表排序
这是我的密码:
public LinkedHashMap sortHashMapByValuesD(HashMap passedMap)
{
ArrayList <Integer>mapKeys = new ArrayList<Integer>(passedMap.keySet());
ArrayList <Double>mapValues= new ArrayList<Double>(passedMap.values());
Collections.reverse(mapValues);
Collections.reverse(mapKeys); //>>**Here the list won't sort for some reason**
LinkedHashMap<Integer, Double> sortedMap = new LinkedHashMap<Integer, Double>();
Iterator valueIt = mapValues.iterator();
while (valueIt.hasNext()) {
Object val = valueIt.next();
//System.out.println(val);
Iterator keyIt = mapKeys.iterator();
while (keyIt.hasNext()) {
Object key = keyIt.next();
Double comp1 =(Double)passedMap.get(key);
Double comp2 = (Double)val;
if (comp1==comp2){
passedMap.remove(key);
mapKeys.remove(key);
sortedMap.put((Integer)key,(Double)val);
break;
}
}
}
return sortedMap;
}
提前谢谢
# 1 楼答案
HashMaps are hashed,未排序。特别是,
HashMap<K, V>
没有实现SortedMap<K, V>
接口。如果需要按键排序的映射,请尝试TreeMap
,或SortedMap
的任何其他实现通常不会请求按索引排序的映射,rt.jar中也不直接支持这些映射。您甚至不能将它们称为
SortedMaps
,因为按值排序的映射(几乎)肯定是按键排序的而不是。虽然您可以实现一个按值排序的映射,但您可能会发现,在坚持java集合框架的哲学思想的同时,有一种稍微不同的方法是符合要求的。尝试创建一个映射支持的集合或迭代器,该集合或迭代器提供所需的顺序,并使用原始HashMap作为其存储一个更简单的解决办法是
但是,使用此解决方案会丢失任何重复的值