Tableaux (Arrays) et listes dynamiques (ArrayLists) en Java

JavaJavaBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), nous allons plonger dans deux structures de données fondamentales en Java : les tableaux (arrays) et les listes dynamiques (ArrayLists). Ces structures nous permettent de stocker et de manipuler des collections de données, ce qui est essentiel pour de nombreuses tâches de programmation. Nous commencerons par le tableau de base, puis passerons à la liste dynamique plus flexible. À la fin de ce laboratoire, vous serez en mesure de créer, manipuler et travailler avec à la fois les tableaux et les listes dynamiques en Java.

Nous aborderons :

  1. La création et l'utilisation de tableaux
  2. L'accès et la modification des éléments de tableau
  3. Introduction aux listes dynamiques
  4. L'ajout, la suppression et l'accès aux éléments dans les listes dynamiques
  5. La conversion entre tableaux et listes dynamiques

Commençons à organiser nos données!

Ceci est un Guided Lab, qui fournit des instructions étape par étape pour vous aider à apprendre et à pratiquer. Suivez attentivement les instructions pour compléter chaque étape et acquérir une expérience pratique. Les données historiques montrent que c'est un laboratoire de niveau débutant avec un taux de réussite de 85%. Il a reçu un taux d'avis positifs de 100% de la part des apprenants.

Création et utilisation de tableaux (arrays)

Les tableaux (arrays) sont une structure de données fondamentale en Java qui vous permet de stocker plusieurs éléments du même type. Imaginez un tableau comme une rangée de boîtes, où chaque boîte peut contenir un élément d'un type spécifique.

  1. Ouvrez le fichier appelé ArrayDemo.java dans votre répertoire de projet.

    public class ArrayDemo {
        public static void main(String[] args) {
            // Nous allons ajouter notre code ici
        }
    }

    Voici la structure de base de notre programme Java. La méthode main est le point de départ d'exécution de notre programme.

  2. Maintenant, déclarons et initialisons un tableau d'entiers. Ajoutez la ligne suivante à l'intérieur de la méthode main :

    int[] numbers = {1, 2, 3, 4, 5};

    Cette ligne crée un tableau d'entiers nommé numbers et l'initialise avec les valeurs 1, 2, 3, 4 et 5. Les crochets [] indiquent à Java que numbers est un tableau.

  3. Affichons les éléments de notre tableau. Ajoutez ces lignes après la déclaration du tableau :

    System.out.println("The elements of the array are:");
    for (int i = 0; i < numbers.length; i++) {
        System.out.println("Element at index " + i + ": " + numbers[i]);
    }

    Ce code utilise une boucle for pour parcourir le tableau. numbers.length nous donne la taille du tableau, et numbers[i] accède à l'élément à l'indice i.

Java array elements output
  1. Enregistrez le fichier, puis compilez et exécutez le programme :

    javac ~/project/ArrayDemo.java
    java -cp ~/project ArrayDemo

    Vous devriez voir une sortie similaire à ceci :

    The elements of the array are:
    Element at index 0: 1
    Element at index 1: 2
    Element at index 2: 3
    Element at index 3: 4
    Element at index 4: 5
  2. Maintenant, calculons la somme de tous les éléments du tableau. Ajoutez ce code après la boucle précédente :

    int sum = 0;
    for (int number : numbers) {
        sum += number;
    }
    System.out.println("The sum of the elements is: " + sum);

    Ce code utilise une boucle for améliorée (également connue sous le nom de boucle for-each) pour parcourir le tableau. C'est une façon plus simple de parcourir tous les éléments lorsque vous n'avez pas besoin de l'indice.

  3. Enfin, trouvons la valeur maximale dans le tableau. Ajoutez ce code :

    int max = numbers[0];
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }
    System.out.println("The maximum value in the array is: " + max);

    Ce code part du principe que le premier élément est le maximum, puis compare chaque élément suivant au maximum actuel, et met à jour le maximum si une valeur plus grande est trouvée.

  4. Enregistrez, compilez et exécutez le programme à nouveau. Vous devriez voir la sortie supplémentaire suivante :

    The sum of the elements is: 15
    The maximum value in the array is: 5
Java array output example
  1. Les tableaux en Java ont une taille fixe, mais nous pouvons modifier leurs éléments. Modifions un élément et affichons le tableau modifié. Ajoutez ce code à la fin de la méthode main :

    numbers[2] = 10;
    System.out.println("\nAfter modifying the third element:");
    for (int number : numbers) {
        System.out.print(number + " ");
    }
    System.out.println();

    Cela change la valeur du troisième élément (indice 2) en 10, puis affiche le tableau modifié.

  2. Enregistrez, compilez et exécutez le programme une dernière fois. Vous devriez voir la sortie supplémentaire suivante :

    After modifying the third element:
    1 2 10 4 5

Félicitations! Vous avez maintenant créé un tableau, accédé à ses éléments, effectué des calculs avec ses valeurs et modifié un élément. N'oubliez pas que les tableaux en Java ont une taille fixe, ce qui signifie qu'une fois que vous avez créé un tableau, vous ne pouvez pas changer sa longueur. Cependant, vous pouvez modifier les valeurs de ses éléments.

Introduction aux listes dynamiques (ArrayLists)

Maintenant que nous avons travaillé avec les tableaux (arrays), présentons les listes dynamiques (ArrayLists). Les listes dynamiques font partie du Framework de collections Java et offrent une façon plus flexible de travailler avec des listes d'objets. Contrairement aux tableaux, les listes dynamiques peuvent augmenter ou diminuer de taille de manière dynamique.

  1. Ouvrez le fichier appelé ArrayListDemo.java dans votre répertoire de projet.

    import java.util.ArrayList;
    
    public class ArrayListDemo {
        public static void main(String[] args) {
            // Nous allons ajouter notre code ici
        }
    }

    Notez l'instruction import en haut. Cela indique à Java que nous souhaitons utiliser la classe ArrayList dans notre programme.

  2. Maintenant, créons une liste dynamique de chaînes de caractères (Strings). Ajoutez cette ligne à l'intérieur de la méthode main :

    ArrayList<String> fruits = new ArrayList<>();

    Cela crée une liste dynamique vide qui peut contenir des objets de type String. La partie <String> est appelée un "générique" et spécifie le type d'éléments que la liste dynamique contiendra.

  3. Ajoutons quelques éléments à notre liste dynamique. Ajoutez ces lignes :

    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Cherry");

    La méthode add() ajoute des éléments à la fin de la liste.

  4. Maintenant, affichons notre liste dynamique. Ajoutez ce code :

    System.out.println("Fruits in the list:");
    for (String fruit : fruits) {
        System.out.println(fruit);
    }

    Cela utilise une boucle for améliorée pour parcourir la liste dynamique, similairement à ce que nous avons fait avec les tableaux.

    Astuce : Vous pouvez compiler et exécuter votre programme à tout moment pour voir la sortie. Ou vous pouvez continuer à ajouter plus de code et l'exécuter tout à la fin.

  5. Les listes dynamiques ont de nombreuses méthodes utiles. Essayons-en quelques-unes. Ajoutez ce code :

    System.out.println("\nNumber of fruits: " + fruits.size());
    System.out.println("The second fruit is: " + fruits.get(1));

    size() renvoie le nombre d'éléments dans la liste dynamique, et get(index) récupère l'élément à l'indice spécifié.

  6. Nous pouvons également remplacer des éléments dans une liste dynamique en utilisant la méthode set(). Ajoutez ce code :

    // Before: [Apple, Banana, Cherry]
    fruits.set(1, "Blueberry");    // Replaces "Banana" with "Blueberry"
    System.out.println("\nAfter replacing the second fruit:");
    System.out.println(fruits);     // [Apple, Blueberry, Cherry]

    set(index, element) remplace l'élément à l'indice spécifié par un nouvel élément. La taille de la liste dynamique reste la même.

  7. Contrairement aux tableaux, les listes dynamiques nous permettent d'insérer des éléments à n'importe quelle position en utilisant la méthode add(index, element). Cela est différent de set() que nous avons vu précédemment. Voyons comment add() fonctionne :

    // Before: [Apple, Blueberry, Cherry]
    fruits.add(1, "Blackberry");
    System.out.println("\nAfter inserting Blackberry at index 1:");
    System.out.println(fruits);
    // After: [Apple, Blackberry, Blueberry, Cherry]

    Comprenons ce qui s'est passé :

    • add(1, "Blackberry") insère "Blackberry" à l'indice 1
    • Les éléments existants à l'indice 1 et suivants (Blueberry, Cherry) sont automatiquement décalés d'une position vers la droite
    • La taille de la liste dynamique augmente de 1
    • Cela est différent de set() qui remplacerait l'élément existant sans décalage ni changement de taille

    Pour mieux visualiser la différence :

    // Using add(index, element) - inserts and shifts
    fruits.add(1, "Blackberry");    // [Apple, Blackberry, Blueberry, Cherry]
    
    // Using set(index, element) - replaces without shifting
    fruits.set(1, "Blackberry");    // [Apple, Blackberry, Cherry]
  8. Nous pouvons également supprimer des éléments d'une liste dynamique. Ajoutez ce code :

    fruits.remove("Cherry");
    System.out.println("\nAfter removing Cherry:");
    System.out.println(fruits);

    Cela supprime la première occurrence de "Cherry" de la liste dynamique. Lorsqu'un élément est supprimé, tous les éléments suivants sont décalés vers la gauche pour combler l'espace laissé vide.

  9. Enfin, vérifions si certains éléments sont dans notre liste dynamique :

    System.out.println("\nDoes the list contain Apple? " + fruits.contains("Apple"));
    System.out.println("Does the list contain Cherry? " + fruits.contains("Cherry"));

    La méthode contains() vérifie si la liste dynamique contient un élément spécifique et renvoie une valeur booléenne.

  10. Enregistrez le fichier, puis compilez et exécutez le programme :

    javac ~/project/ArrayListDemo.java
    java -cp ~/project ArrayListDemo

    Vous devriez voir une sortie similaire à ceci :

    Fruits in the list:
    Apple
    Banana
    Cherry
    
    Number of fruits: 3
    The second fruit is: Banana
    
    After replacing the second fruit:
    [Apple, Blueberry, Cherry]
    
    After inserting Blackberry at index 1:
    [Apple, Blackberry, Blueberry, Cherry]
    
    After removing Cherry:
    [Apple, Blackberry, Blueberry]
    
    Does the list contain Apple? true
    Does the list contain Cherry? false

Félicitations! Vous avez maintenant créé une liste dynamique, ajouté et supprimé des éléments, accédé à des éléments par leur indice et utilisé diverses méthodes de liste dynamique. Vous avez appris les différences importantes entre des opérations telles que add() qui insère et décale des éléments, et set() qui remplace des éléments. Les listes dynamiques offrent plus de flexibilité que les tableaux, car elles peuvent augmenter et diminuer en taille selon les besoins. Cela les rend très utiles lorsque vous ne savez pas à l'avance combien d'éléments vous allez manipuler.

Conversion entre tableaux (arrays) et listes dynamiques (ArrayLists)

Parfois, vous devrez peut-être convertir des tableaux (arrays) en listes dynamiques (ArrayLists) et vice versa. Java propose des méthodes pratiques pour effectuer ces conversions. Explorons comment convertir un tableau en liste dynamique et inversement.

  1. Ouvrez le fichier appelé ConversionDemo.java dans votre répertoire de projet.

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class ConversionDemo {
        public static void main(String[] args) {
            // Nous allons ajouter notre code ici
        }
    }

    Notez les instructions import en haut. Nous importons les classes dont nous aurons besoin pour nos conversions.

  2. Commençons par convertir un tableau en liste dynamique. Ajoutez ce code à l'intérieur de la méthode main :

    String[] colorArray = {"Red", "Green", "Blue"};
    List<String> colorList = Arrays.asList(colorArray);
    
    System.out.println("Array converted to ArrayList:");
    System.out.println(colorList);

    Arrays.asList() convertit un tableau en une List. Notez que cela crée une liste de taille fixe basée sur le tableau original.

  3. Modifions la liste dynamique et voyons ce qui se passe au tableau original. Ajoutez ce code :

    colorList.set(1, "Yellow");
    
    System.out.println("\nAfter modifying the ArrayList:");
    System.out.println(colorList);
    System.out.println("Original array after ArrayList modification:");
    System.out.println(Arrays.toString(colorArray));

    Arrays.toString() est une méthode pratique pour afficher un tableau.

  4. Maintenant, convertissons une liste dynamique en tableau. Ajoutez ce code :

    ArrayList<Integer> numberList = new ArrayList<>();
    numberList.add(1);
    numberList.add(2);
    numberList.add(3);
    
    Integer[] numberArray = numberList.toArray(new Integer[0]);
    
    System.out.println("\nArrayList converted to array:");
    System.out.println(Arrays.toString(numberArray));

    Nous utilisons la méthode toArray() de la liste dynamique pour la convertir en tableau. Nous passons new Integer[0] en argument, qui sert de suggestion pour le type et la taille du tableau à créer.

  5. Enfin, modifions le tableau et voyons s'il affecte la liste dynamique. Ajoutez ce code :

    numberArray[0] = 100;
    System.out.println("\nAfter modifying the array:");
    System.out.println("Array: " + Arrays.toString(numberArray));
    System.out.println("ArrayList: " + numberList);
  6. Enregistrez le fichier, puis compilez et exécutez le programme :

    javac ~/project/ConversionDemo.java
    java -cp ~/project ConversionDemo

    Vous devriez voir une sortie similaire à ceci :

    Array converted to ArrayList:
    [Red, Green, Blue]
    
    After modifying the ArrayList:
    [Red, Yellow, Blue]
    Original array after ArrayList modification:
    [Red, Yellow, Blue]
    
    ArrayList converted to array:
    [1, 2, 3]
    
    After modifying the array:
    Array: [100, 2, 3]
    ArrayList: [1, 2, 3]

Cette démonstration montre comment les tableaux et les listes dynamiques peuvent être convertis l'un en l'autre. Il est important de noter la différence de comportement :

  • Lorsque vous convertissez un tableau en une List en utilisant Arrays.asList(), la List résultante est basée sur le tableau original. Cela signifie que les modifications apportées à la List seront reflétées dans le tableau, et vice versa.
  • Lorsque vous convertissez une liste dynamique en tableau en utilisant toArray(), vous créez un nouveau tableau indépendant de la liste dynamique. Les modifications apportées à ce nouveau tableau n'affecteront pas la liste dynamique originale.

Comprendre ces conversions et leur comportement est crucial lorsque vous travaillez avec différents types de collections en Java, notamment lorsque vous utilisez des API ou des bibliothèques qui préfèrent l'un des types par rapport à l'autre.

Résumé

Dans ce laboratoire (lab), nous avons exploré deux structures de données fondamentales en Java : les tableaux (arrays) et les listes dynamiques (ArrayLists). Récapitulons ce que nous avons appris :

  1. Les tableaux (arrays) :

    • Nous avons créé et initialisé des tableaux en utilisant la syntaxe int[] numbers = {1, 2, 3, 4, 5};
    • Nous avons appris à accéder aux éléments d'un tableau en utilisant la notation d'indice, comme numbers[0]
    • Nous avons parcouru les tableaux en utilisant à la fois les boucles for traditionnelles et les boucles for améliorées
    • Nous avons effectué des calculs avec les éléments des tableaux, comme trouver la somme et la valeur maximale
    • Nous avons vu que les tableaux ont une taille fixe, mais que nous pouvons modifier leurs éléments
  2. Les listes dynamiques (ArrayLists) :

    • Nous avons créé des listes dynamiques en utilisant ArrayList<String> fruits = new ArrayList<>();
    • Nous avons appris à ajouter des éléments avec add(), à supprimer des éléments avec remove() et à accéder aux éléments avec get()
    • Nous avons utilisé des méthodes telles que size(), set() et contains() pour travailler avec les listes dynamiques
    • Nous avons vu que les listes dynamiques peuvent augmenter et diminuer de taille de manière dynamique, offrant plus de flexibilité que les tableaux
  3. Conversion entre tableaux (arrays) et listes dynamiques (ArrayLists) :

    • Nous avons converti des tableaux en listes dynamiques en utilisant Arrays.asList()
    • Nous avons converti des listes dynamiques en tableaux en utilisant la méthode toArray()
    • Nous avons observé les différents comportements lors de la modification des collections converties

Les tableaux et les listes dynamiques sont des outils essentiels en programmation Java. Les tableaux sont idéaux pour travailler avec un nombre fixe d'éléments et peuvent être plus efficaces en termes d'utilisation de la mémoire. Les listes dynamiques, en revanche, offrent plus de flexibilité et un ensemble riche de méthodes pour manipuler la collection.

Au fur et à mesure de votre progression dans le monde de Java, vous utiliserez souvent à la fois les tableaux et les listes dynamiques. Le choix entre eux dépend souvent de vos besoins spécifiques - si vous connaissez le nombre exact d'éléments avec lesquels vous allez travailler, un tableau peut être préférable. Si vous avez besoin d'une collection dynamique qui peut augmenter ou diminuer de taille, ou si vous avez besoin des méthodes supplémentaires offertes par les listes dynamiques, alors une liste dynamique serait le meilleur choix.