L'interface Set représente une collection ne contenant aucun éléments en double. Autrement dit, les ensembles ne doivent contenir que des éléments uniques.

La méthode equals() appliquée entre chaque objet d'une implémentation de l'interface Set, doit retourner obligatoirement false.

Les collections Set peuvent accepter des objets de n'importe quel type, ainsi qu'au plus un et un seul élement null.

Un cas particulier des ensembles consiste à ne pas permettre à un objet Set de contenir un élément de type Set.

Les implémentations de l'inteface Set peuvent ajouter des restrictions supplémentaires, telles qu'interdire les éléments null ou de certains types. Dans le cas ou des tentatives d'ajouter des éléments inéligibles seraient pratiquées, des exceptions contrôlées pourraient être levées, à l'image d'un NullPointerException ou d'un ClassCastException. En outre, les opérations sur un élément inéligible, telles qu'une vérification de présence, peuvent provoquer un comportement différent selon les implémentations comme la levée d'une exception ou un échec normal de l'opération (retour d'un booléen false).

L'interface Set est implémentée par les classes HashSet et AbstractSet. De même, elle est étendue par l'interface SortedSet qui permet un tri sur un ensemble. L'autre classe TreeSet n'implémente pas directement l'interface Set puisqu'elle s'appuie sur l'interface SortedSet.

Le parcours d'un ensemble s'effectue via un itérateur, lequel est obtenu par la méthode iterator().

public class CollectionSet {
    public static void main(String[] args) {
    String[] joursSemaine = {"lundi", 
                             "mardi", 
                             "mercredi", 
                             "jeudi", 
                             "vendredi", 
                             "samedi", 
                             "dimanche"};
    Set ensemble = new HashSet();
    for(int i = 0; i < joursSemaine.length; i++){
      ensemble.add(joursSemaine[i]);
    }
    System.out.println("Taille de l'ensemble : " + ensemble.size());
    Iterator valeurs = ensemble.iterator();

    while(valeurs.hasNext()){
      System.out.println(valeurs.next());
      valeurs.remove();
    }
    System.out.println("Taille de l'ensemble : " + ensemble.size());
  }
}
Les méthodes
boolean add(Object o)
ajoute l'élément spécifié au sein de l'objet Set, s'il n'est pas déjà présent.
boolean addAll(Collection c)
ajoute tous les éléments de la collection spécifiée au sein de l'objet Set, s'ils ne sont pas déjà présents.
void clear()
supprime tous les éléments de la collection Set.
boolean contains(Object o)
retourne true si l'élément spécifié est contenu dans l'objet Set.
boolean containsAll(Collection c)
retourne true si l'objet Set contient tous les éléments de la collection spécifiée.
boolean equals(Object o)
teste l'égalité entre la collection Set et l'objet spécifié.
int hashCode()
retourne le code de hachage pour l'objet Set.
boolean isEmpty()
retourne true si l'ensemble ne contient aucun élément.
Iterator iterator()
retourne un itérateur sur les éléments de l'ensemble.
boolean remove(Object o)
supprime l'élément spécifié de la collection Set, s'il est présent.
boolean removeAll(Collection c)
supprime tous les éléments contenus dans la collection spécifiée, de l'objet Set, s'ils y sont présents.
boolean retainAll(Collection c)
retient seulement les éléments de l'objet Set, qui ne sont pas contenus dans la collection spécifiée.
int size()
retourne le nombre d'éléments de l'ensemble.
Object[] toArray()
retourne un tableau contenant tous les éléments de l'objet Set.
Object[] toArray(Object[] a)
retourne un tableau contenant tous les éléments de l'objet Set, et le type d'exécution du tableau retourné est celui du tableau spécifié.
Exemple [voir]
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;

public class CollectionSet {
  public static void main(String[] args) {
    String[] joursSemaine = {"lundi", "mardi", "mercredi", "jeudi", 
                             "vendredi", "samedi", "dimanche"};
    String[] daysOfWeek = {"sunday", "monday", "tuesday", "wednesday", 
                           "thursday", "friday", "saturday"};

    Set ensemble = creerEnsemble(joursSemaine);
    System.out.println("Taille de l'ensemble 1 : " 
                                           + ensemble.size());
    Set ensemble2 = creerEnsemble(daysOfWeek);
    System.out.println("Taille de l'ensemble 2 : " 
                                           + ensemble2.size());

    Set ensemble3 = new TreeSet();
    System.out.println("Code de hachage ensemble 1 : " 
                                           + ensemble.hashCode());
    ensemble3.add(ensemble);
    System.out.println("Code de hachage ensemble 2 : " 
                                           + ensemble2.hashCode());
    //ensemble3.add(ensemble2); //EXCEPTION ClassCastException
    System.out.println("Taille de l'ensemble 3 : " 
                                           + ensemble3.size());
    System.out.println("Code de hachage ensemble 3 : " 
                                           + ensemble3.hashCode());
    ensemble3.clear();
    System.out.println("Taille de l'ensemble 3 après clear() : " 
                                           + ensemble3.size());
    System.out.println("Code de hachage ensemble 3 : " 
                                           + ensemble3.hashCode());
    ensemble3.addAll(ensemble2);
    System.out.println("Taille de l'ensemble 3 après "
                              "addAll(collection) : "  + ensemble3.size());
    System.out.println("Code de hachage ensemble 3 : " 
                                           + ensemble3.hashCode());

    if(ensemble2.containsAll(ensemble3)){
      System.out.println("L'ensemble 2 contient les " 
                                             + "éléments de l'ensemble 3 !");
    }
    
    if(ensemble.contains(joursSemaine[2])){
      System.out.println("La valeur \"mercredi\" a été " 
                                             + "trouvée dans l'ensemble 1 puis "
                                             + "a été remplacée par \"wednesday\"!");
      ensemble.remove(joursSemaine[2]);
      ensemble.add(daysOfWeek[3]);
    }
    
    System.out.println("Sauvegarde des éléments de "
                                           + "la collection Set dans un tableau.");
    Object[] tableauTemp = ensemble.toArray(joursSemaine);

    afficherValeurs(ensemble);
    System.out.println("Taille de l'ensemble 1 : " + ensemble.size());
    afficherValeurs(ensemble2);
    System.out.println("Taille de l'ensemble 2 : " + ensemble2.size());
    afficherValeurs(ensemble3);
    System.out.println("Taille de l'ensemble 3 : " + ensemble3.size());
  }
  
  public static Set creerEnsemble(String[] tab){
    Set ens = new TreeSet();
    for(int i = 0; i < tab.length; i++){
      ens.add(tab[i]);
    }
    return ens;
  }
  public static void afficherValeurs(Set ens){
    int i = 1;
    Iterator valeurs = ens.iterator();
    while(valeurs.hasNext()){
      System.out.println(i++ + " entrée : " + valeurs.next());
      valeurs.remove();
    }
  }
}