您好,我正在研究按字母顺序对arraylist进行排序的代码,但是我编写的代码却以相反的字母顺序返回。有人知道为什么吗?我似乎无法弄清楚,对于初学者程序员的帮助将不胜感激!
public class InsertionSorting {
public static void main(String[] args) {
ArrayList<String> color = new ArrayList<String>(5);
color.add("White");
color.add("Black");
color.add("Red");
color.add("White");
color.add("Yellow");
for (int i = 0; i < 5; i++) {
System.out.println(color.get(i).toString());
}
System.out.println();
insertionSort(color);
for (int i = 0; i < 5; i++) {
System.out.println(color.get(i).toString());
}
}
public static ArrayList<String>
insertionSort(ArrayList<String> a) {
for (int i = 1; i < a.size(); i++) {
String s = a.get(i);
int j = i - 1;
while (j >= 0 && s.compareTo(a.get(j)) > 0) {
String y = a.get(j + 1);
a.set(j + 1, a.get(j));
a.set(j, y);
j--;
}
String y = a.get(j + 1);
y = s;
}
return a;
}
}
答案 0 :(得分:0)
工作正常。它只是按相反的顺序排序。换句话说,可以更改compare
的相等性。
while (j >= 0 && s.compareTo(a.get(j)) < 0) {
String y = a.get(j + 1);
a.set(j + 1, a.get(j));
a.set(j, y);
j--;
}
答案 1 :(得分:0)
您可以将 main 中的第二个 for 更改为
for (int i = 4; i >= 0; i--){
System.out.println(color.get(i).toString());
}
或更轻松地,您可以在 main
中使用它ArrayList<String> colors = new ArrayList<String>(5);
colors.add("White");
colors.add("Black");
colors.add("Red");
colors.add("Brown");
colors.add("Yellow");
Collections.sort(colors);
for(String color : colors){
System.out.println(color);
}