为什么即使在使用collections.reverse()之后,也没有在java中对arrayList进行排序

时间:2014-04-15 02:54:04

标签: java arraylist hashmap

我正在尝试根据其值来对哈希图进行排序,

我这样做的方法是将hashmap的keyset和valueset分成两个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;
     }

提前致谢

1 个答案:

答案 0 :(得分:1)

HashMaps are hashed,未排序。特别是,HashMap<K, V>未实现SortedMap<K, V>接口。如果您想要按键排序的地图,请尝试TreeMapSortedMap的任何其他实现。

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

更简单的解决方案是

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

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