Как отсортировать LinkedHashMap по значению без Collections.sort ()? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь написать метод сортировки выбора для 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 голосов
/ 13 сентября 2018

Ваш код по сути правильный, вы просто перепутали значения и индексы в нескольких местах.

Вам необходимо заменить:

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

Убедитесь, что вы понимаете, почему изменения работают.

...