gpt4 book ai didi

java - 为什么即使使用 collections.reverse() 之后 arrayList 在 java 中也不排序

转载 作者:行者123 更新时间:2023-12-01 13:08:36 25 4
gpt4 key购买 nike

我正在尝试根据 HashMap 的值对其进行排序,

我这样做的方法是将 HashMap 的键集和值集分成两个 arrayList,然后分别对列表进行排序,然后在进行一些比较操作后将值添加到新的 haspMap 中但由于某种原因,collection.reverse(LIST)不会按降序对列表进行排序

这是我的代码:

 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;
}

提前致谢

最佳答案

HashMaps are hashed ,未排序。特别是HashMap<K, V>没有实现SortedMap<K, V>界面。如果您想要按键排序的 map ,请尝试 TreeMap ,或 SortedMap 的任何其他实现.

按索引排序的 map 并不常见,并且在 rt.jar 中也不直接支持。你甚至不能调用他们SortedMaps ,因为按值排序的映射(几乎)当然按键排序。虽然您可以实现按值排序的映射,但您可能会发现稍微不同的方法符合要求,同时坚持 java 集合框架的理念。尝试创建一个映射支持的集合或迭代器,它提供您需要的排序,并使用您的原始 HashMap 作为其存储。

一个更简单的解决方案是

Set<Double> sortedSet = new TreeSet<Double>(yourPreferredComparator);
sortedSet.addAll(passedMap.values());

但是,使用此解决方案您将丢失所有重复的值。

关于java - 为什么即使使用 collections.reverse() 之后 arrayList 在 java 中也不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com