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

つまり、lib実装の要素を確認するまで、これを行うComparableことはできません(要素を比較できない場合、並べ替えることはできません)。

次のようなものからメソッドシグネチャを呼び出せるようにするには、メソッドシグネチャを変更するにはどうすればよいですか。

次のように変更できます。

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

ただし、署名を変更するだけでは不十分です。たとえば、などの代わりにを.size()使用する必要があるためです。つまり、メソッドを書き直す必要があります。.length.get(i)[i]

繰り返しになりますが、この方法はのリストにのみ適用できComparable、任意のObjectのリストには適用できません。

于 2012-05-03T08:23:26.237 に答える
0

クラス.compareToによって実装されていないメソッドを使用しているため、メソッドの実装がないため、バブルソートが機能しません。Object.compareTo

あなたの場合、実際に同等のインターフェースを実装するアイテムの配列リストを作成するのが最善だと思います。これは、あなたがやろうとしていることとは逆です(メソッドシグネチャをメソッド呼び出しに合わせて変更します)。

それが完了したら、toArrayメソッドを使用してリストを配列に変換することにより、メソッドを呼び出すことができるはずです。

注目に値するもう 1 つのことは、bubbleSortメソッドが何も返さないことです。したがって、メソッド呼び出しはコンパイルされません。

于 2012-05-03T08:20:33.357 に答える