如何在没有 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);
确保您了解更改的原因。
我正在尝试为 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);
确保您了解更改的原因。