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]) // } } }
ここで、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); } }
以上がジェネリックスを使用して Java で配列のソートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。