Dovresti controllare un duplicato prima di inserirlo in un set

2022-07-29 10:30:37

Sto imparando a usare i set. La mia domanda è: i set non contengono duplicati. Quando proviamo a inserire duplicati, non genera alcun errore e rimuove automaticamente i duplicati. È buona norma controllare ogni valore prima di inserirlo nel set se esiste o meno? O va bene fare qualcosa come il codice qui sotto? Penso che Java eseguirà internamente il controllo utilizzando .contains(value) . Cosa ne pensi?

Quale sarebbe la complessità di Big O in entrambi i casi considerando che ci sono n elementi che entrano nel set?

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

public class DuplicateTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Set<Integer> mySet = new HashSet<Integer>();

         mySet.add(10);
         mySet.add(20);
         mySet.add(30);
         mySet.add(40);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);
         mySet.add(50);

         System.out.println("Contents of the Hash Set :"+mySet);
    }

}

- Zack

Source
Risposta


31
  • Secondo i documenti :

    public boolean add(E e)

    Aggiunge l'elemento specificato a questo set se non è già presente. Più formalmente, aggiunge l'elemento specificato e a questo insieme se questo insieme non contiene alcun elemento e2 tale che (e==null ? e2==null : e.equals(e2)). Se questo set contiene già l'elemento, la chiamata lascia il set invariato e restituisce false.

    Quindi il metodo add() ti restituisce già un vero o un falso. Quindi non è necessario eseguire il controllo aggiuntivo.