Listes

Types de données et exceptions en Java

Jim White

Java Developer

Interface List

  • Interface List, sous-interface de Collection
    • Définit un groupe d'objets ordonné
    • Peut contenir des doublons
  • Plusieurs implémentations de List
    • Comportements similaires
    • L'implémentation détermine la gestion interne des objets
Types de données et exceptions en Java

Implémentations de List

  • ArrayList : liste redimensionnable, indexée (comme les tableaux), ordonnée

Les ArrayList ressemblent aux tableaux Java avec des éléments indexés

  • LinkedList : objets chaînés aux suivants et précédents.

Les LinkedList sont des listes d'objets reliés par des pointeurs

  • Quelle que soit l'implémentation, on ajoute, retire, modifie de la même façon
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Types de données et exceptions en Java

ArrayList

  • Instanciez avec new et utilisez les génériques pour préciser le type
  • Ajouter un objet en fin de liste : .add(object)
  • Accéder à un objet : .get(index)
    • ArrayList est indexée à partir de zéro
  • Remplacer/modifier un objet : .set(index, object)
  • Supprimer un objet : .remove(index)
  • Vider tous les objets : .clear()
  • Compter les objets : .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicates allowed
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Removes the first horse animals.remove(0); // Removes all objects animals.clear();
animals.size();
Types de données et exceptions en Java

Objets et primitifs

  • Utilisez des wrappers pour ajouter un primitif à tout objet du Collections Framework
  • Les primitifs ajoutés sont « autoboxed »
    • Autobox : opération qui met automatiquement un primitif dans un wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 est automatiquement encapsulé par Integer puis ajouté
  • L'autoboxing fonctionne avec tous les objets du Collections Framework
Types de données et exceptions en Java

Collections hétérogènes

  • Les structures de données du Collections Framework peuvent être hétérogènes
    • Hétérogène = contenir des objets de types différents
    • Utilisez Object comme type paramétré
ArrayList<Object> list = new ArrayList<Object>(); // Autoriser tout objet
list.add(new Integer(5)); // Ajouter un Integer
list.add(6); // Ajouter un Integer via autoboxing
list.add("Hello"); // Ajouter une String
Types de données et exceptions en Java

Parcourir une List

  • Utilisez la syntaxe « for each » pour parcourir les objets d'une List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each pour parcourir tout l'ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Types de données et exceptions en Java

println sur une List

  • Le contenu d'une instance de List (comme ArrayList) peut être affiché avec println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Afficher tous les éléments de l'ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Afficher tous les éléments de l'ArrayList
[horse, cow, chicken]
[5, Hello]
Types de données et exceptions en Java

LinkedList

  • LinkedList se construit comme une ArrayList
  • LinkedList a les mêmes méthodes que ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Create a new ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Add an object to the list
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Replace an object
System.out.println(cars); // Display the list
cars.remove(0); // Remove an object
cars.clear();  // Remove all objects
cars.size(); // Get the list length
[Ford, Toyota]
Types de données et exceptions en Java

Méthodes LinkedList supplémentaires

  • Quelques méthodes supplémentaires
    • addFirst() : ajouter au début
    • addLast() : ajouter à la fin
    • removeFirst() : supprimer au début
    • removeLast() : supprimer à la fin
cars.addFirst("Fiat"); // Add to the beginning
cars.addLast("BMW"); // Add the the end
cars.removeFirst(); // Remove the first object
cars.removeLast(); // Remove the last object
Types de données et exceptions en Java

Similarités entre types de collection

  • ArrayList et LinkedList se ressemblent
    • D'autres types du Collections Framework auront aussi des similitudes
    • C'est volontaire
  • Elles partagent une interface : List
    • Un exemple de polymorphisme (« plusieurs formes »)
Types de données et exceptions en Java

ArrayList vs LinkedList

  • Les opérations sur ArrayList et LinkedList (ou toute List) sont identiques
    • Le choix du type List dépend de l'usage
  • Points à noter pour ArrayList :
    • Accès aléatoire rapide (ex : list.get(11))
    • Ajout et suppression au milieu plus lents
    • Car les objets doivent être physiquement déplacés lors des insertions/suppressions

Ajouter au milieu d'une ArrayList nécessite beaucoup de déplacements

Types de données et exceptions en Java

ArrayList vs LinkedList

  • Points à noter pour LinkedList :
    • Accès aléatoire plus lent (ex : list.get(11))
    • Ajout et suppression au milieu plus rapides
    • Car aucun objet n'est déplacé physiquement : seules quelques références changent

Ajouter au milieu d'une LinkedList ne nécessite que de changer des pointeurs

Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...