Rumah > Java > javaTutorial > Cara menggunakan generik untuk melaksanakan pengisihan tatasusunan di Jawa

Cara menggunakan generik untuk melaksanakan pengisihan tatasusunan di Jawa

WBOY
Lepaskan: 2023-05-16 16:22:06
ke hadapan
1067 orang telah melayarinya

1. Pengecutan berurutan tatasusunan integer

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;    }
Salin selepas log masuk

1.1 Abstrak kaedah di atas, *** apa yang kami fikirkan ialah menggunakan rujukan Objek java untuk melaksanakan kaedah umum

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;    }
Salin selepas log masuk

2.1 Nampaknya rujukan Object sangat mudah, dan carian berurutan kedua boleh menggunakan float, double, String, dsb. Masalah akan timbul jika kita ingin mengkaji lebih lanjut

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])            // }        }    }
Salin selepas log masuk

2.2 Kod di atas adalah algoritma pengisihan berurutan Jika kita ingin menulis kaedah umum, kita mesti memaksa jenis objek ditukar menjadi satu yang melaksanakan Comparable. kaedah antara muka.

JVM akan memberikan amaran apabila memproses jenis cast paksa: nyahtanda 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])            // }        }    }
Salin selepas log masuk

Daripada ini kita dapat melihat bahawa menggunakan rujukan Objek untuk menangani masalah biasa, apabila menggunakan parameter sebenar jika Antara muka Sebanding tidak dilaksanakan, pengkompil akan membuang pengecualian masa jalan castClassException. Program sebegini tidak selamat.

3.1 Gunakan rujukan Objek untuk menyamaratakan algoritma (seperti carian berjujukan). Dengan menggunakan rujukan Objek dan nilai sasaran tatasusunan, selagi jenis data melaksanakan kaedah sama, kelas data yang hendak dibandingkan dalam algoritma mesti melaksanakan antara muka Sebanding Kini kami menggunakan generik java untuk menyelesaikan masalah ini

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);        }    }
Salin selepas log masuk

Kaedah statik selectionSort() dalam kelas Arrays, kaedah ini berkaitan dengan jenis integer. Untuk menggunakan versi generik untuk melaksanakan algoritma ini, memandangkan dua elemen dalam tatasusunan jenis generik T[] perlu dibandingkan, jenis objek atau kelas supernya yang melepasi parameter sebenar mesti melaksanakan antara muka Sebanding.

Atas ialah kandungan terperinci Cara menggunakan generik untuk melaksanakan pengisihan tatasusunan di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan