如何在不使用Collections.sort()的情况下按值对LinkedHashMap进行排序?

时间:2018-09-13 01:45:41

标签: java sorting dictionary hashmap selection-sort

我正在尝试为LinkedHashMap / ArrayList编写选择排序方法,但是遇到问题,我不确定这是怎么回事。它可以编译,但实际上不对列表进行排序。我试图按值降序排列。任何帮助将不胜感激。

public static List sort(LinkedHashMap<String, Integer> words) {


        List<Map.Entry<String, Integer>> entries = new ArrayList<>(words.size());
        entries.addAll(words.entrySet());

        int max;

        for(int i = 0; i < entries.size(); i++) {

            max = entries.get(i).getValue();

            for(int j = i + 1; j < entries.size(); j++) {

                if (entries.get(j).getValue().compareTo(entries.get(max).getValue()) > 0) {

                    max = entries.get(j).getValue();
                }

            }

            if(max != i) {

                Map.Entry temp1 = entries.get(i);

                entries.set(entries.get(i).getValue(), entries.get(max));

                entries.set(entries.get(max).getValue(), temp1);
            }

        }

        return entries;
    }

1 个答案:

答案 0 :(得分:3)

您的代码本质上是正确的,您只是在几个地方混合了值和索引。

您需要替换:

max = entries.get(i).getValue();

使用

max = i;

max = entries.get(j).getValue();

max = j;

entries.set(entries.get(i).getValue(), entries.get(max));
entries.set(entries.get(max).getValue(), temp1);

使用

entries.set(i, entries.get(max));
entries.set(max, temp1);

确保您了解更改的工作原理。