问题描述
排序不起作用,它不按字母对名称进行排序,我用int编写了一个冒泡排序算法,它运行良好。你能帮助我吗? compareto()方法有问题吗?
public ArrayList<FootballPlayer> sortByNames(ArrayList<FootballPlayer> pList)
{
FootballPlayer z;
for(int i=0; i<pList.size(); i++)
{
for(int j=0; j<pList.size()-i-1;j++)
{
if((pList.get(i).getName()).compareto(pList.get(j+1).getName())>0)
{
z = pList.get(j);
pList.set(j,pList.get(j+1));
pList.set(j+1,z);
}
}
}
for(int i=0; i<pList.size(); i++)
{
System.out.print(pList.get(i).getName()+";");
System.out.println("");
}
return pList;
}
解决方法
您的实现不是 BubbleSort !检查Bubble sort或事件Cocktail shaker sort更高级。
public static void bubbleSort(List<String> pList) {
boolean done = false;
for (int i = pList.size(); !done; i--) {
done = true;
for (int j = 0; j + 1 < i; j++) {
if (pList.get(j).compareTo(pList.get(j + 1)) <= 0)
continue;
done = false;
String tmp = pList.get(j);
pList.set(j,pList.get(j + 1));
pList.set(j + 1,tmp);
}
}
}
输出:
List<String> pList = new ArrayList<>();
for (int i = 0; i < 10; i++)
pList.add(String.valueOf(i));
Collections.shuffle(pList);
System.out.println(pList); // [0,6,7,9,5,8,4,1,3,2]
bubbleSort(pList);
System.out.println(pList); // [0,2,9]