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

How to sort a LinkedHashMap by value without Collections.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;
    }

你的代码基本上是正确的,你只是在几个地方混淆了值和索引。

您需要更换:

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

确保您了解更改的原因。