MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Interfața Set și clasa HashSet

Interfața Set extinde interfața Collection și reprezintă un set de elemente unice. Set nu adaugă metode noi, ci doar modifică cele moștenite. În special, metoda add() adaugă un element în colecție și returnează true dacă acel element nu există deja în colecție.

Clasa generalizată HashSet reprezintă o tabelă hash. Ea își moștenește funcționalitatea de la clasa AbstractSet și implementează interfața Set.

O tabelă hash este o structură de date în care toate obiectele au o cheie unică sau un cod hash. Această cheie permite identificarea unică a obiectului în tabelă.

Pentru a crea un obiect HashSet, se pot folosi unul dintre următorii constructori:

  • HashSet(): creează o listă goală
  • HashSet(Collection<? extends E> col): creează o tabelă hash în care adaugă toate elementele colecției col
  • HashSet(int capacity): parametrul capacity indică capacitatea inițială a tablei, care implicit este 16
  • HashSet(int capacity, float koef): parametrul koef sau coeficientul de umplere, a cărui valoare trebuie să fie între 0.0 și 1.0, indică cât de mult trebuie să fie umplută capacitatea cu obiecte înainte ca aceasta să fie extinsă.

De exemplu, un coeficient de 0.75 indică faptul că atunci când capacitatea este umplută în proporție de 3/4, aceasta va fi extinsă.

Clasa HashSet nu adaugă metode noi, implementând doar cele care sunt declarate în clasele părinte și interfețele aplicate:

import java.util.HashSet;

public class Program{
     
   public static void main(String[] args) {
         
       HashSet<String> states = new HashSet<String>();
         
       // adăugăm în listă câteva elemente
       states.add("Germany");
       states.add("France");
       states.add("Italy");
       // încercăm să adăugăm un element care deja există în colecție
       boolean isAdded = states.add("Germany");
       System.out.println(isAdded);    // false
       
       System.out.printf("Set-ul conține %d elemente \n", states.size());    // 3
         
       for(String state : states){
         
           System.out.println(state);
       }
       // eliminarea unui element
       states.remove("Germany");
         
       // tabelă hash de obiecte Person
       HashSet<Person> people = new HashSet<Person>();
       people.add(new Person("Mike"));
       people.add(new Person("Tom"));
       people.add(new Person("Nick"));
       for(Person p : people){
         
           System.out.println(p.getName());
       }
   }
}
class Person{
     
   private String name;
   public Person(String value){
         
       name = value;
   }
   String getName(){return name;}
}

Acest exemplu arată utilizarea unui set HashSet cu șiruri de caractere și obiecte de tip Person. Spre deosebire de liste, seturile nu permit duplicate, iar atunci când încercăm să adăugăm un element existent, operația returnează false.

← Lecția anterioară Lecția următoare →