Sets, Files d'attente

Types de données et exceptions en Java

Jim White

Java Developer

Interface Set

  • Set est aussi un type de Collection
    • N'accepte pas les doublons
      • Garantit l'unicité de chaque élément
    • Les objets Set sont généralement non ordonnés (donc sans index)
  • Les List ressemblent à un pilulier : chaque objet a une case précise
  • Les Set ressemblent à un sac : les objets y sont tenus sans ordre

Les listes sont comme des piluliers où les objets sont stockés à un index précis

Les ensembles sont comme des sacs retenant des objets de façon aléatoire et non ordonnée

1 Images courtoisie de Wikimedia Commons
Types de données et exceptions en Java

List vs Set

  • Quand utiliser un Set
    • Garantit l'unicité des éléments
    • Plus rapide pour les recherches
      • Vérifier si un objet est dans un Set
    • Plus économe en mémoire à mesure que la collection grandit
    • Utile pour tester l'appartenance dans des caches
      • Ex. : trouver les mots uniques d'un document
Types de données et exceptions en Java

List vs Set

  • Quand utiliser une List
    • Préserve l'ordre et permet les doublons
    • Meilleure pour accéder aux éléments par position
    • Meilleure pour ajouter/supprimer par index
    • Utile quand l'ordre importe
      • Ex. : étapes d'une séquence ou pièces d'une liste de lecture
Types de données et exceptions en Java

Implémentation de Set

  • Plusieurs implémentations de Set
    • HashSet est populaire
  • HashSet
    • Un sac non ordonné d'objets
    • Plus rapide que d'autres Set pour insérer, supprimer et rechercher
    • Utilise généralement plus de mémoire que d'autres Set
    • Permet de stocker un seul null

Les HashSet sont des sacs non ordonnés d'objets permettant un seul null

Types de données et exceptions en Java

Construction d'un HashSet

  • Utilisez un constructeur générique paramétré pour créer un HashSet
    HashSet<String> set = new HashSet<String>();
    
  • HashSet se trouve dans le paquet java.util
    • Exige un import
    • import java.util.HashSet
Types de données et exceptions en Java

Méthodes de HashSet

  • Utilisez .add() et .remove() pour ajouter ou enlever des objets
  • Utilisez .remove() puis .add() pour remplacer un objet
  • Utilisez .contains() pour vérifier si un objet existe déjà
  • Les doublons sont ignorés
  • Accepte null
  • Ordre non garanti
set.add("France");
set.add("Japan");
set.add("Brazil");
set.add("Egypt");
set.add(null); // null is allowed
set.remove("Brazil");
boolean z =
  set.contains("France"); // z is true
set.add("Japan"); // Ignored
System.out.println(set);
[null, Japan, Egypt, France]
Types de données et exceptions en Java

Interface Queue

  • La structure Queue traite les objets en premier entré, premier sorti (FIFO)
    • Premier ajouté, premier retiré
    • Comme une file au guichet
    • A une tête et une queue

Image d'une file avec la tête (début) et la queue (fin) indiquées

  • Plusieurs implémentations de Queue
    • Comportements et opérations similaires
Types de données et exceptions en Java

ArrayBlockingQueue

  • Implémentation de Queue populaire
    • Tableau en dessous
  • Attention : ArrayBlockingQueue est dans le paquet java.util.concurrent
    • Pas dans java.util
Types de données et exceptions en Java

Construction d'une ArrayBlockingQueue

  • Utilisez un constructeur générique paramétré pour créer une ArrayBlockingQueue
    • Capacité (nombre d'objets) définie dans le constructeur
import java.util.concurrent;  // En haut de la classe

// Créer une file pouvant stocker 4 String
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Types de données et exceptions en Java

Méthodes d'ArrayBlockingQueue

  • Utilisez .add(object) ou .offer(object) pour ajouter en queue
    • .add(object) lève une exception si la Queue est pleine
    • .offer(object) ignore le nouvel objet si pleine
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
queue.offer("France");
queue.offer("Japan");
queue.offer("Brazil");
queue.offer("Egypt");
queue.offer("China"); // Ignores China

// Causes IllegalStateException
// queue.add("China");

System.out.println(queue);
[France, Japan, Brazil, Egypt]
Types de données et exceptions en Java

Méthodes d'ArrayBlockingQueue

  • Utilisez .remove() ou .poll() pour retirer en tête
    • .remove() lève une exception si la Queue est vide
    • .poll() retourne null si vide
  • N'autorise pas null
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
String x = queue.poll(); // x is null
// Causes NoSuchElementException
// String y = queue.remove();

queue.offer("France");
String next = queue.poll();
System.out.println(next);
France
Types de données et exceptions en Java

Passons à la pratique !

Types de données et exceptions en Java

Preparing Video For Download...