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
    • Comportement global similaire
    • 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 par des liens vers les suivants et précédents.

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

  • Peu importe l'implémentation, on ajoute, retire, modifie les objets 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

  • Instancier avec new et utiliser des génériques pour le type de contenu
  • Ajouter un objet à la fin avec .add(object)
  • Accéder à un objet avec .get(index)
    • ArrayList utilise un index à partir de zéro
  • Remplacer/modifier un objet avec .set(index, object)
  • Supprimer un objet avec .remove(index)
  • Vider tous les objets avec .clear()
  • Compter les objets avec .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

  • Utiliser des enrobants pour ajouter un primitif à tout objet du Collections Framework
  • Les primitifs ajoutés sont « autoboxed »
    • Autobox : mise automatique d'un primitif dans un enrobant
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 is automatically wrapped by Integer then added
  • 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
    • Utiliser Object comme type paramétré
ArrayList<Object> list = new ArrayList<Object>(); // Permet n'importe quel 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

  • Utiliser 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

Afficher une List avec println

  • Le contenu d'une instance de List (comme ArrayList) peut s'afficher 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

  • Les LinkedList se construisent comme les instances d'ArrayList
  • Les LinkedList ont les mêmes méthodes qu'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 additionnelles

  • Quelques méthodes supplémentaires
    • addFirst() ajoute au début de la liste
    • addLast() ajoute à la fin de la liste
    • removeFirst() retire au début
    • removeLast() retire à 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 collections

  • ArrayList et LinkedList se ressemblent
    • D'autres types du Collections Framework auront aussi des similarités
    • C'est intentionnel
  • Elles partagent l'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 les mêmes
    • Le choix du type de List dépend de l'usage
  • Points à considérer pour ArrayList :
    • Accès aléatoire rapide (ex : list.get(11))
    • Ajout/suppression plus lents au milieu
    • Car les objets doivent être physiquement déplacés à l'insertion/suppression

Ajouter des objets au milieu d'une ArrayList exige beaucoup de déplacements

Types de données et exceptions en Java

ArrayList vs LinkedList

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

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

Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...