所以我有以下方法
public static <T extends Comparable<? super T>> void bubbleSort( T[] a)
//public static void bubbleSort(Comparable[] a)
{
for(int top = a.length-1; top > 0; top--)
for(int i = 0; i < top; i++)
if(a[i+1].compareTo(a[i]) < 0)
{ T tmp = a[i];
//Comparabl tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
如何更改方法签名以便能够从
这样的方式调用它public int sortByTitle()
{
return Sorting.bubbleSort(lib); // (lib is lib = new ArrayList<Object>();
}
我不能使用收集方法或比较对象。
答案 0 :(得分:0)
您正在使用.compareTo
类未实现的Object
方法,而这种方法又不会使您的冒泡排序工作,因为.compareTo
没有实现方法
在您的情况下,我认为最好创建一个实际实现类似接口的项目数组列表,这与您尝试执行的操作相反(更改方法签名以适合方法调用)。
一旦你完成了,你应该能够通过使用toArray方法将列表转换为数组来调用方法。
另一件值得注意的事情是你的bubbleSort
方法没有返回任何内容,因此你的方法调用不应该编译。
答案 1 :(得分:0)
简而言之,在确保lib
的元素实现Comparable
之前,您将无法执行此操作(如果您无法比较元素,则无法排序)。
如何更改方法签名以便能够从
这样的方式调用它
你可以改变它:
public static <T extends Comparable<? super T>> void bubbleSort(List<T> a)
但是,更改签名是不够的,因为您必须使用.size()
代替.length
,.get(i)
而不是[i]
等。单词,你必须重写方法。
该方法再次适用于Comparable
的列表,而不是Object
的任意列表。