ジェネリックスを使用して Java で配列のソートを実装する方法

WBOY
リリース: 2023-05-16 16:22:06
転載
1035 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート