1. 整数配列の逐次縮小
public static int seqSearch(int[] arr, int first, int last, int target) { for (int i = first; i < last; i++) if (arr[i] == target) return i; return -1; }
1.1 上記のメソッドを抽象化して、***Java のオブジェクト参照を使用してユニバーサル メソッドを実装することを考えてみましょう
public static int seqSearch(Object[] arr, int first, int last, Object target) { for (int i = first; i < last; i++) if (arr[i].equals(target)) return i; return -1; }
2.1 Object の参照は非常に便利で、2 回目の逐次検索では float、double、String などが使用できます。さらに詳しく学習したい場合は問題が発生します
public static void selectionSort(int[] arr) { int n = arr.length, smallIndex = 0; for (int i = 0; i < n; i++) { // 遍历array数组 smallIndex = i; for (int j = i + 1; j < n; j++) if (arr[smallIndex] > arr[j]) // 选择最小的索引j smallIndex = j; // if (smallIndex != i) { exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n]) // } } }
2.2 上記のコードは逐次ソートアルゴリズムですが、一般的なメソッドを記述したい場合は、オブジェクトの型を Comparable インターフェイスを実装した型に強制する必要があります。方法。
JVM は型の強制変換を処理するときに警告をスローします: Cast
@SuppressWarnings("unchecked") public static void selectionSort(Object[] arr) { int n = arr.length, smallIndex = 0; for (int i = 0; i < n; i++) { // 遍历array数组 smallIndex = i; for (int j = i + 1; j < n; j++) if (((Comparable<Object>)arr[smallIndex]).compareTo(((Comparable<Object>)arr[j])) > 0) // 选择最小的索引j smallIndex = j; // if (smallIndex != i) { exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n]) // } } }のチェックを外しますこのことから、一般的な問題に対処するためにオブジェクト参照が使用されていることがわかります。 Comparable インターフェイスが実装されていない場合、コンパイラは CastClassException ランタイム例外をスローします。そのようなプログラムは安全ではありません。 3.1 オブジェクト参照を使用してアルゴリズム (逐次検索など) を一般化します。オブジェクト参照と配列のターゲット値を使用することにより、データ型が等しいメソッドを実装している限り、アルゴリズムで比較されるデータ クラスは Comparable インターフェイスを実装する必要があります。
ここで、Java ジェネリックスを使用してこの問題を解決します。
public static <T extends Comparable<? super T>> void selectionSort(T[] arr){ int n = arr.length; int smallIndex; for (int i = 0; i < n-1; i++) { smallIndex=i; for (int j = i+1; j < n; j++) if (arr[j].compareTo(arr[smallIndex])<0) smallIndex=j; exchange(arr, smallIndex, i); } }Arrays クラスの静的メソッドselectionSort()。このメソッドは整数型を処理します。ジェネリック バージョンを使用してこのアルゴリズムを実装するには、ジェネリック型配列 T[] 内の 2 つの要素を比較する必要があるため、実際のパラメーターを渡すオブジェクト型またはそのスーパークラスは Comparable インターフェイスを実装する必要があります。
以上がジェネリックスを使用して Java で配列のソートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。