有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么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) 个答案

  1. # 1 楼答案

    HashMaps are hashed,未排序。特别是,HashMap<K, V>没有实现SortedMap<K, V>接口。如果需要按键排序的映射,请尝试TreeMap,或SortedMap的任何其他实现

    通常不会请求按索引排序的映射,rt.jar中也不直接支持这些映射。您甚至不能将它们称为SortedMaps,因为按值排序的映射(几乎)肯定是按键排序的而不是。虽然您可以实现一个按值排序的映射,但您可能会发现,在坚持java集合框架的哲学思想的同时,有一种稍微不同的方法是符合要求的。尝试创建一个映射支持的集合或迭代器,该集合或迭代器提供所需的顺序,并使用原始HashMap作为其存储

    一个更简单的解决办法是

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

    但是,使用此解决方案会丢失任何重复的值