0

所以我有以下方法

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>();
}

我不能使用收集方法或比较器对象。

4

2 回答 2

0

您正在使用该类.compareTo未实现的方法,Object这反过来又不会使您的冒泡排序工作,因为不会有该.compareTo方法的实现。

在您的情况下,我认为最好创建一个实际实现可比较接口的项目的数组列表,这与您尝试做的相反(更改方法签名以适应方法调用)。

完成此操作后,您应该能够通过使用toArray方法将列表转换为数组来调用该方法。

另一件值得注意的事情是你的bubbleSort方法不返回任何东西,因此你的方法调用不应该编译。

于 2012-05-03T08:20:33.357 回答
0

简而言之,在确保实现元素之前,您将无法执行此操作libComparable如果无法比较元素,则无法排序)。

如何更改方法签名以便能够从类似的东西中调用它

你可以像这样改变它:

public static <T extends Comparable<? super T>> void bubbleSort(List<T> a)

但是,更改签名是不够的,因为您必须使用.size()而不是.length.get(i)而不是[i]等。换句话说,您必须重写方法。

再一次,该方法仅适用于 s 的列表Comparable,而不适用于 s 的任意列表Object

于 2012-05-03T08:23:26.237 回答