ジェネリックスの仕組みを理解しようとしました。私はアルゴリズムを並べ替え、いくつかの実装を作成し、ソートする前に、私はAbstractSorter.javaでshuffleArray方法により入力配列をシャッフル:ジェネリックアレイのシャッフルアルゴリズム
public class AbstractSorter<T extends Comparable> {
public void swap(final T[] input, int srcPos, int dstPos) {
if (dstPos != srcPos) {
T accum = input[dstPos];
input[dstPos] = input[srcPos];
input[srcPos] = accum;
}
}
public T[] shuffleArray(final T[] inputArray) {
// E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];
T[] result = (T[]) new Comparable[inputArray.length];
System.arraycopy(inputArray, 0, result, 0, inputArray.length);
int index;
Random random = new Random();
for (int i = result.length - 1; i > 0; i--) {
index = random.nextInt(i + 1);
if (index != i) {
swap(result, i, index);
}
}
return result;
}
public boolean more(final T x, final T y) {
return (x.compareTo(y) > 0);
}
しかし、私は次のように使用しようとすると:
AbstractSorter<Integer> sortHelper = new AbstractSorter();
Integer[] expResult = new Integer[]{-30, -29, -28, -27 };
Integer[] shuffleArray = sortHelper.shuffleArray(expResult);
System.out.println("Array ="+Arrays.toString(shuffleArray));
それは私が例外が発生しました:
java.lang.ClassCastException:
[Ljava.lang.Comparable; cannot be cast to [Ljava.lang.Integer;
どのようにシャッフル方法を修正できますかわかりません。この機能を配列に実装することは可能ですか、コレクションに移行する必要がありますか?
ありがとうございます!
と何が間違っていますinbuiltシャッフルメソッドはなぜそれを使用しない? https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util。リスト) – StackFlowed
'T extend Comparable'ではないでしょうか? –
maraca
@StackFlowed私は配列を使用し、リストに移行したいと思います。しかし、私は他の方法がない場合。 –