我正在尝试为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;
}
答案 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);
确保您了解更改的工作原理。