Maison > Java > javaDidacticiel > Comment utiliser des génériques pour implémenter le tri de tableaux en Java

Comment utiliser des génériques pour implémenter le tri de tableaux en Java

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-05-16 16:22:06
avant
1163 Les gens l'ont consulté

1. Rétrécissement séquentiel des tableaux d'entiers

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;    }
Copier après la connexion

1.1 En faisant abstraction de la méthode ci-dessus, ***pensons à utiliser la référence Object de Java pour implémenter la méthode universelle#🎜🎜 #

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;    }
Copier après la connexion
#🎜🎜 #2.1 Il semble que la référence à Object soit très pratique, et la deuxième recherche séquentielle peut utiliser float, double, String, etc. Des problèmes surgiront si nous voulons étudier plus en détail

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])            // }        }    }
Copier après la connexion

2.2 Le code ci-dessus est un algorithme de tri séquentiel Si nous voulons écrire une méthode générale, nous devons forcer la conversion du type d'objet en une implémentation comparable. Méthodes d'interface.

JVM lancera un avertissement lors du traitement du type de conversion forcée : décochez la case 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])            // }        }    }
Copier après la connexion

De là, nous pouvons voir que l'utilisation de la référence d'objet pour traiter les problèmes courants, lorsque l'interface Comparable n'est pas implémenté lors de l'utilisation de paramètres réels, le compilateur lancera une exception d'exécution castClassException. Un tel programme est dangereux.

3.1 Utiliser la référence Objet pour généraliser un algorithme (comme la recherche séquentielle). En utilisant la référence d'objet et la valeur cible du tableau, tant que le type de données implémente la méthode égale, la classe de données à comparer dans l'algorithme doit implémenter l'interface Comparable,

Maintenant, nous utilisons des génériques Java pour résoudre ce problème problème

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);        }    }
Copier après la connexion
La méthode statique selectionSort() dans la classe Arrays, cette méthode traite les types entiers. Pour utiliser la version générique pour implémenter cet algorithme, puisque les deux éléments du tableau de type générique T[] doivent être comparés, le type d'objet ou sa superclasse qui transmet le paramètre réel doit implémenter l'interface Comparable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Impossible d'installer Java
Depuis 1970-01-01 08:00:00
0
0
0
Installer JAVA
Depuis 1970-01-01 08:00:00
0
0
0
Java peut-il être utilisé comme backend du Web ?
Depuis 1970-01-01 08:00:00
0
0
0
Aide : Données chiffrées JAVA Décryptage PHP
Depuis 1970-01-01 08:00:00
0
0
0
Est-ce en langage Java ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal