Seturi, Cozi

Tipuri de date și excepții în Java

Jim White

Java Developer

Interfața Set

  • Set este și el un tip de Collection
    • Nu permite obiecte duplicate
      • Garantează unicitatea fiecărui element
    • Obiectele Set sunt, în general, neordonate (deci nu au index)
  • List-urile sunt ca o cutie de pastile pentru obiecte; fiecare obiect ocupă un loc specific
  • Set-urile sunt ca un sac care conține obiecte; acestea sunt ținute aleatoriu în sac

List-urile sunt ca organizatoarele de pastile, unde obiectele sunt stocate la un index într-o locație specifică

Set-urile sunt ca sacii care conțin obiecte aleatoriu și neordonat

1 Imagini furnizate de Wikimedia Commons
Tipuri de date și excepții în Java

List vs Set

  • Când să utilizați un Set
    • Garantează unicitatea elementelor sale
    • Căutările sunt mai rapide
      • Verificarea dacă un obiect există într-un Set
    • Mai eficient din punct de vedere al memoriei pe măsură ce colecția crește
    • Util pentru testarea apartenenței în cache-uri
      • Exemplu: găsirea cuvintelor unice dintr-un document
Tipuri de date și excepții în Java

List vs Set

  • Când să utilizați un List
    • Păstrează ordinea elementelor și permite duplicate
    • Performanță mai bună la accesarea elementelor după poziție
    • Performanță mai bună la adăugarea/ștergerea elementelor după index
    • Util când ordinea elementelor este importantă
      • Ex: gestionarea pașilor unei secvențe sau a melodiilor dintr-o listă de redare
Tipuri de date și excepții în Java

Implementarea Set

  • Multe implementări ale Set
    • HashSet este o implementare populară
  • HashSet
    • Un sac neordonat de obiecte
    • Mai rapid decât alte implementări Set pentru inserare, ștergere și căutare
    • Utilizează în general mai multă memorie decât alte implementări Set
    • Permite stocarea unui singur null

HashSet sunt saci neordonați de obiecte care permit un singur null

Tipuri de date și excepții în Java

Construirea unui HashSet

  • Utilizați constructorul generic parametrizat pentru a crea un HashSet
    HashSet<String> set = new HashSet<String>();
    
  • HashSet se află în pachetul java.util
    • Necesită un import
    • import java.util.HashSet
Tipuri de date și excepții în Java

Metode HashSet

  • Utilizați .add() și .remove() pentru a adăuga sau elimina obiecte
  • Utilizați .remove() și apoi .add() pentru a înlocui un obiect
  • Utilizați .contains() pentru a verifica dacă un obiect există deja
  • Duplicatele sunt ignorate
  • Permite null
  • Ordinea nu este garantată
set.add("France");
set.add("Japan");
set.add("Brazil");
set.add("Egypt");
set.add(null); // null is allowed
set.remove("Brazil");
boolean z =
  set.contains("France"); // z is true
set.add("Japan"); // Ignored
System.out.println(set);
[null, Japan, Egypt, France]
Tipuri de date și excepții în Java

Interfața Queue

  • Structura de date Queue procesează obiectele în ordinea FIFO (primul intrat, primul ieșit)
    • Primul obiect adăugat este primul eliminat
    • Precum o coadă la o casă de bilete
    • Are un obiect la început (head) și unul la sfârșit (tail)

Imagine a unei cozi cu head (început) și tail (sfârșit) identificate

  • Mai multe implementări ale Queue
    • Comportament și operații similare
Tipuri de date și excepții în Java

ArrayBlockingQueue

  • Implementare populară a Queue
    • Folosește un array intern
  • Atenție: ArrayBlockingQueue se află în pachetul java.util.concurrent
    • Nu în pachetul java.util
Tipuri de date și excepții în Java

Construirea unui ArrayBlockingQueue

  • Utilizați constructorul generic parametrizat pentru a crea un ArrayBlockingQueue
    • Are o capacitate sau limită de obiecte specificată prin constructor
import java.util.concurrent;  // At the top of the class

// Create new queue that can store 4 Strings
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Tipuri de date și excepții în Java

Metode ArrayBlockingQueue

  • Utilizați .add(object) sau .offer(object) pentru a adăuga la sfârșitul cozii (tail)
    • .add(object) aruncă o excepție când Queue este la capacitate maximă
    • .offer(object) ignoră noul obiect când capacitatea este atinsă
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
queue.offer("France");
queue.offer("Japan");
queue.offer("Brazil");
queue.offer("Egypt");
queue.offer("China"); // Ignores China

// Causes IllegalStateException
// queue.add("China");

System.out.println(queue);
[France, Japan, Brazil, Egypt]
Tipuri de date și excepții în Java

Metode ArrayBlockingQueue

  • Utilizați .remove() sau .poll() pentru a elimina din începutul cozii (head)
    • .remove() aruncă o excepție când Queue este goală
    • .poll() returnează null când Queue este goală
  • Nu permite null
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
String x = queue.poll(); // x is null
// Causes NoSuchElementException
// String y = queue.remove();

queue.offer("France");
String next = queue.poll();
System.out.println(next);
France
Tipuri de date și excepții în Java

Să exersăm!

Tipuri de date și excepții în Java

Preparing Video For Download...