9.3 Ensembles

Les ensembles sont des classes génériques prédéfinies, utiles lorsque l’on a besoin de variables faisant référence à plusieurs éléments.

Trois sont communément utilisés :

- les tableaux : `T[]`
- les collections : `List<T>`
- les dictionnaires clé/valeur : `Map<K,V>`

Ces trois ensembles possèdent des méthodes semblables qui permettent d’ajouter, de récupérer, de modifier, de supprimer des informations, de connaître la taille de l’ensemble.

9.3.1 Interfaces : un niveau d’abstraction

Dans les classes prédéfinies, seules les classes les plus précises sont concrètes : toutes les autres sont des interfaces génériques.

Héritage :
classe Object < interface Iterable<T> < interface Collection < interface List < classes concrètes comme ArrayList, LinkedList < interface Set < classes concrètes comme EnumSet, HashSet, LinkedHashSet, TreeSet < interface Map<K,​V> < classes concrètes comme EnumMap, HashMap, Hashtable, Properties, TreeMap

Par convention, on utilise le transtypage en déclarant une List<T>, un Set<T> ou un Map<K,​V> que l’on initialise avec la sous-classe de notre choix.
Cela permet de faciliter la mise à jour du code si on décide d’utiliser une autre sous-classe : on ne modifie que le constructeur.
Par exemple : List<Integer> entiers = new ArrayList<Integer>;