Heim  >  Artikel  >  Java  >  Verwendung von Generika zur Implementierung der Array-Sortierung in Java

Verwendung von Generika zur Implementierung der Array-Sortierung in Java

WBOY
WBOYnach vorne
2023-05-16 16:22:061023Durchsuche

1. Sequentielle Verkleinerung von Ganzzahl-Arrays

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 Die obige Methode abstrahieren, ***wir denken daran, die Referenz von Javas Objekt zu verwenden, um die universelle Methode zu implementieren#🎜🎜 #

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 Es scheint, dass die Objektreferenz sehr praktisch ist und die zweite sequentielle Suche Float, Double, String usw. verwenden kann. Wenn wir weiter studieren möchten, werden Probleme auftreten Vergleichbare Schnittstellenmethoden.

JVM gibt eine Warnung aus, wenn die Art der erzwungenen Umwandlung verarbeitet wird: Umwandlung deaktivieren

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])            // }        }    }
Daran können wir erkennen, dass die Objektreferenz verwendet wird, um häufige Probleme zu lösen, wenn die vergleichbare Schnittstelle verwendet wird nicht implementiert ist, wenn tatsächliche Parameter verwendet werden, löst der Compiler eine castClassException-Laufzeitausnahme aus. Ein solches Programm ist unsicher.

3.1 Verwenden Sie die Objektreferenz, um einen Algorithmus zu verallgemeinern (z. B. sequentielle Suche). Unter Verwendung der Objektreferenz und des Zielwerts des Arrays muss die zu vergleichende Datenklasse im Algorithmus die Comparable-Schnittstelle implementieren, solange der Datentyp die Methode „equals“ implementiert.

Jetzt verwenden wir Java-Generika, um dieses Problem zu lösen problem

@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])            // }        }    }
Die statische Methode SelectionSort() in der Arrays-Klasse, diese Methode befasst sich mit Ganzzahltypen. Um die generische Version zur Implementierung dieses Algorithmus zu verwenden, muss der Objekttyp oder seine Oberklasse, die den tatsächlichen Parameter übergibt, die Comparable-Schnittstelle implementieren, da die beiden Elemente im generischen Typarray T[] verglichen werden müssen.

Das obige ist der detaillierte Inhalt vonVerwendung von Generika zur Implementierung der Array-Sortierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen