我有一个家庭作业,我必须从已经开始的项目中完成某些方法存根。我必须完成的一种方法是“冒泡排序”算法。我的代码:
public void bubbleSort(ArrayList <Comparable> list){
// O(n^2) (quadratic sorting algorithm)
for (int i = 0; i < list.size(); i++){
for(int j = 0; j < list.size() - 1; j++){
if(list.get(j).compareTo(list.get(j + 1)) > 0){
int temp = list.get(j);// this says "required int found java.lang.Comparable"
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
}
}
因为参数是<Comparable>
,所以我无法按照惯例int temp = list.get(j);
进行操作,因为我可以使用ArrayList<Integer>
。我会将<Comparable>
更改为<Integer>
(然后还会修改.compareTo()
部分),但我想完成赋予的内容。基本上我如何获得索引j
的值?
答案 0 :(得分:2)
问题是你认为你需要知道里面的 Comparable
。你没有。您正在使用的compareTo()
方法由该界面定义,告诉您需要知道的所有内容,这就是重点。这样,您的排序可以对实现该接口的任何进行排序。您只需移动Comparable
。
而不是:
int temp = list.get(j);
你需要:
Comparable temp = list.get(j);
如果您查看JavaDoc for Integer,您会注意到它实现了Comparable
界面,因此您可以将您的排序称为:
bubbleSort(myList);
其中myList
被声明为:
ArrayList<Integer> myList;
另外值得注意的是......它应该是:
public void bubbleSort(List<Comparable>) {
而不是特定的ArrayList
- 这样就可以传入任何类型的List
。
答案 1 :(得分:1)
这个怎么样?
if (list.get(j).compareTo(list.get(j + 1)) > 0) {
Comparable temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}