Sets, Queues

Types de données et exceptions en Java

Jim White

Java Developer

Interface Set

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

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

Les ensembles ressemblent à des sacs contenant 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 quand la collection grandit
    • Utile pour tester l'appartenance dans des caches
      • Exemple : 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 autorise les doublons
    • Meilleure pour accéder aux éléments par position
    • Meilleure pour ajouter/supprimer par index
    • Idéale quand l'ordre compte
      • Ex. : étapes d'une séquence ou chansons d'une playlist
Types de données et exceptions en Java

Implémentations de Set

  • Plusieurs implémentations de Set
    • HashSet est courante
  • 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
    • Autorise un seul null

Les HashSet sont des sacs non ordonnés d'objets autorisant un 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 package java.util
    • Nécessite un import
    • import java.util.HashSet
Types de données et exceptions en Java

Méthodes de HashSet

  • Utilisez .add() et .remove() pour ajouter/supprimer des objets
  • Utilisez .remove() puis .add() pour remplacer un objet
  • Utilisez .contains() pour vérifier si l'objet existe déjà
  • Les doublons sont ignorés
  • Autorise 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)
    • Le premier objet ajouté est le premier retiré
    • Comme une file au guichet
    • Possède une tête et une queue

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

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

ArrayBlockingQueue

  • Implémentation populaire de Queue
    • Un tableau en interne
  • Attention : ArrayBlockingQueue est dans le package 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 max d'objets) définie dans le constructeur
import java.util.concurrent;  // At the top of the class

// Create new queue that can store 4 Strings
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 la Queue est 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...