Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Maîtriser les algorithmes de collection Java : Tri, mélange et plus

Maîtriser les algorithmes de collection Java : Tri, mélange et plus

Le framework Java Collections fournit un ensemble riche de méthodes statiques — souvent appelées algorithmes génériques — qui permettent de manipuler des structures de données sans écrire de code répétitif. Ces utilitaires fonctionnent avec toute collection implémentant l'interface Collection, offrant simplicité et performance.


1. Tri avec Collections.sort()

La méthode sort() ordonne les éléments dans l'ordre naturel (croissant). Pour un ordre personnalisé, fournissez un Comparator.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(4);
        nombres.add(2);
        nombres.add(3);
        System.out.println("ArrayList non trié : " + nombres);
        Collections.sort(nombres);
        System.out.println("ArrayList trié : " + nombres);
    }
}

Sortie

ArrayList non trié : [4, 2, 3]
ArrayList trié : [2, 3, 4]

Pour un ordre décroissant ou des critères spécifiques, utilisez un Comparator personnalisé.


2. Mélange aléatoire avec Collections.shuffle()

Utilisez shuffle() pour randomiser la séquence des éléments, idéal pour les jeux ou l'échantillonnage.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(1);
        nombres.add(2);
        nombres.add(3);
        System.out.println("ArrayList trié : " + nombres);
        Collections.shuffle(nombres);
        System.out.println("ArrayList après mélange : " + nombres);
    }
}

Sortie

ArrayList trié : [1, 2, 3]
ArrayList après mélange : [2, 1, 3]

Chaque exécution produit une permutation différente grâce à l'algorithme Fisher-Yates sous-jacent.


3. Manipulation courante des données

Java offre une suite de méthodes utilitaires pour transformer les collections :

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(1);
        nombres.add(2);
        System.out.println("ArrayList1 : " + nombres);

        Collections.reverse(nombres);
        System.out.println("ArrayList1 inversé : " + nombres);

        Collections.swap(nombres, 0, 1);
        System.out.println("ArrayList1 après swap() : " + nombres);

        ArrayList<Integer> nouveauxNombres = new ArrayList<>();
        nouveauxNombres.addAll(nombres);
        System.out.println("ArrayList2 avec addAll() : " + nouveauxNombres);

        Collections.fill(nombres, 0);
        System.out.println("ArrayList1 après fill() : " + nombres);

        Collections.copy(nouveauxNombres, nombres);
        System.out.println("ArrayList2 après copy() : " + nouveauxNombres);
    }
}

Sortie

ArrayList1 : [1, 2]
ArrayList1 inversé : [2, 1]
ArrayList1 après swap() : [1, 2]
ArrayList2 avec addAll() : [1, 2]
ArrayList1 après fill() : [0, 0]
ArrayList2 après copy() : [0, 0]

Note : copy() nécessite que la collection de destination ait au moins autant d'éléments que la source.


4. Recherche binaire avec Collections.binarySearch()

Localisez efficacement un élément dans une collection triée. La méthode renvoie l'index de l'élément ou un point d'insertion négatif s'il n'est pas trouvé.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(1);
        nombres.add(2);
        nombres.add(3);
        int pos = Collections.binarySearch(nombres, 3);
        System.out.println("La position de 3 est " + pos);
    }
}

Sortie

La position de 3 est 2.

Astuce : Triez toujours la collection avant d'appeler binarySearch() ; sinon le résultat est indéfini.


5. Composition de collections

Ces utilitaires analysent les relations entre collections :

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(1);
        nombres.add(2);
        nombres.add(3);
        nombres.add(2);
        System.out.println("ArrayList1 : " + nombres);

        int compte = Collections.frequency(nombres, 2);
        System.out.println("Nombre de 2 : " + compte);

        ArrayList<Integer> nouveauxNombres = new ArrayList<>();
        nouveauxNombres.add(5);
        nouveauxNombres.add(6);
        System.out.println("ArrayList2 : " + nouveauxNombres);

        boolean disjoint = Collections.disjoint(nombres, nouveauxNombres);
        System.out.println("Les deux listes sont disjointes : " + disjoint);
    }
}

Sortie

ArrayList1 : [1, 2, 3, 2]
Nombre de 2 : 2
ArrayList2 : [5, 6]
Les deux listes sont disjointes : true

6. Trouver le minimum et le maximum

Récupérez le plus petit ou le plus grand élément avec min() et max() — utiles pour l'analyse et les vérifications de bornes.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> nombres = new ArrayList<>();
        nombres.add(1);
        nombres.add(2);
        nombres.add(3);
        int min = Collections.min(nombres);
        System.out.println("Élément minimum : " + min);
        int max = Collections.max(nombres);
        System.out.println("Élément maximum : " + max);
    }
}

Sortie

Élément minimum : 1
Élément maximum : 3

Java

  1. Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
  2. Commentaires Java : Types, utilisation et bonnes pratiques
  3. Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
  4. Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
  5. Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
  6. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  7. Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
  8. Annotations Java expliquées : types, placement et exemples pratiques
  9. Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code