是否可以使用ArrayList <comparative>?</comparative>获取索引的值

时间:2013-12-23 02:59:58

标签: java arraylist

我有一个家庭作业,我必须从已经开始的项目中完成某些方法存根。我必须完成的一种方法是“冒泡排序”算法。我的代码:

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的值?

2 个答案:

答案 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);
}