Set.equals în Java

Două mulțimi sunt egale dacă au exact aceleași elemente, indiferent de ordine sau de implementare (HashSet, TreeSet).

Sintaxă
boolean equals(Object o)
int hashCode()

Ce face Set.equals

a.equals(b) returnează true dacă b este tot un Set, are aceeași mărime și conține fiecare element din a. Ordinea nu contează, iar implementarea nici atât: un HashSet și un TreeSet cu aceleași valori sunt egale.

O mulțime nu este egală cu o listă, chiar dacă au aceleași elemente. hashCode() este suma codurilor hash ale elementelor, deci două mulțimi egale au același cod. Așa poți folosi mulțimi ca elemente în alte mulțimi sau ca chei într-un map.

Parametri

Parametru Descriere
o Obiectul cu care se compară.

Ce returnează

equals: boolean. hashCode: int.

Exemple

Exemplul 1: Ordinea și implementarea nu contează

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Set<String> a = new LinkedHashSet<>(List.of("Iași", "Cluj", "Arad"));
        Set<String> b = new TreeSet<>(List.of("Arad", "Iași", "Cluj"));
        Set<String> c = new HashSet<>(List.of("Iași", "Cluj"));
        System.out.println("a = b: " + a.equals(b));
        System.out.println("a = c: " + a.equals(c));
        System.out.println("hash egal: " + (a.hashCode() == b.hashCode()));
        System.out.println("mulțime = listă: " + b.equals(List.of("Arad", "Cluj", "Iași")));
    }
}

Rezultat

a = b: true
a = c: false
hash egal: true
mulțime = listă: false

Exemplul 2: Grupuri cu aceiași membri

Mulțimile egale sunt considerate același element într-un HashSet de mulțimi.

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        List<Set<String>> echipe = List.of(
                Set.of("Ana", "Radu"), Set.of("Radu", "Ana"), Set.of("Ana", "Elena"));
        Set<Set<String>> distincte = new HashSet<>(echipe);
        System.out.println("Echipe propuse: " + echipe.size());
        System.out.println("Echipe diferite: " + distincte.size());
    }
}

Rezultat

Echipe propuse: 3
Echipe diferite: 2

Greșeli frecvente

  • Compari mulțimi cu ==. Operatorul verifică dacă e același obiect, nu dacă au aceleași elemente.
  • Compari o mulțime cu o listă și aștepți true. Transformă una în tipul celeilalte: set.equals(new HashSet<>(lista)).

Comenzi înrudite

  • Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.
  • List.equals: Două liste sunt egale dacă au aceleași elemente în aceeași ordine, indiferent de clasa lor; hashCode urmează aceeași regulă.
  • Map.equals: Două map-uri sunt egale dacă au exact aceleași perechi cheie → valoare, indiferent de ordine sau de implementare.
  • HashSet: Mulțimea cea mai rapidă: add, remove și contains în timp aproape constant, dar fără o ordine garantată a elementelor.