Zbiory, kolejki

Typy danych i wyjątki w Javie

Jim White

Java Developer

Interfejs Set

  • Set to również rodzaj Collection
    • Nie dopuszcza duplikatów obiektów
      • Gwarantuje unikalność każdego elementu
    • Obiekty Set są generalnie nieuporządkowane (bez indeksu)
  • List jest jak pojemnik na tabletki – każdy obiekt w określonym miejscu
  • Set jest jak worek z obiektami – obiekty przechowywane losowo

Listy są jak organizatory pigułek, gdzie obiekty przechowywane są pod określonym indeksem

Zbiory są jak worki przechowujące obiekty losowo i nieuporządkowanie

1 Images courtesy Wikimedia Commons
Typy danych i wyjątki w Javie

List a Set

  • Kiedy używać Set
    • Gwarantuje unikalność elementów
    • Przyspiesza wyszukiwanie
      • Sprawdzanie czy obiekt jest w Set
    • Bardziej pamięciooszczędne przy dużych kolekcjach
    • Dobre do testowania przynależności w pamięciach podręcznych
      • Przykład: wyszukiwanie unikalnych słów w dokumencie
Typy danych i wyjątki w Javie

List a Set

  • Kiedy używać List
    • Zachowuje kolejność elementów i dopuszcza duplikaty
    • Lepsza wydajność przy dostępie do elementów według pozycji
    • Lepsza wydajność przy dodawaniu/usuwaniu elementów według indeksu
    • Dobra gdy kolejność elementów jest istotna
      • Np.: zarządzanie krokami sekwencji lub utworami na playliście
Typy danych i wyjątki w Javie

Implementacja Set

  • Wiele implementacji Set
    • HashSet to popularna implementacja
  • HashSet
    • Nieuporządkowany zbiór obiektów
    • Szybszy niż inne implementacje Set przy wstawianiu, usuwaniu i wyszukiwaniu
    • Zazwyczaj zużywa więcej pamięci niż inne implementacje Set
    • Dopuszcza przechowywanie jednego null

HashSet to nieuporządkowane zbiory obiektów dopuszczające jeden null

Typy danych i wyjątki w Javie

Tworzenie HashSet

  • Użyj generycznego konstruktora parametryzowanego do tworzenia HashSet
    HashSet<String> set = new HashSet<String>();
    
  • HashSet znajduje się w pakiecie java.util
    • Wymaga importu
    • import java.util.HashSet
Typy danych i wyjątki w Javie

Metody HashSet

  • Użyj .add() i .remove() do dodawania i usuwania obiektów
  • Użyj .remove() a następnie .add() aby zastąpić obiekt
  • Użyj .contains() aby sprawdzić, czy obiekt już istnieje
  • Duplikaty są ignorowane
  • Dopuszcza null
  • Kolejność nie jest gwarantowana
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]
Typy danych i wyjątki w Javie

Interfejs Queue

  • Struktura danych Queue przetwarza obiekty w kolejności FIFO (pierwszy wchodzi, pierwszy wychodzi)
    • Pierwszy dodany obiekt jest pierwszym usuwanym
    • Jak kolejka w kasie biletowej
    • Posiada obiekt głowy i ogona

Obraz kolejki z zaznaczoną głową (początek) i ogonem (koniec)

  • Kilka implementacji Queue
    • Podobne zachowanie i operacje
Typy danych i wyjątki w Javie

ArrayBlockingQueue

  • Popularna implementacja Queue
    • Tablica wewnątrz
  • Uwaga: ArrayBlockingQueue znajduje się w pakiecie java.util.concurrent
    • Nie w pakiecie java.util
Typy danych i wyjątki w Javie

Tworzenie ArrayBlockingQueue

  • Użyj generycznego konstruktora parametryzowanego do tworzenia ArrayBlockingQueue
    • Posiada pojemność lub limit obiektów określony w konstruktorze
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);
Typy danych i wyjątki w Javie

Metody ArrayBlockingQueue

  • Użyj .add(object) lub .offer(object) aby dodać do ogona
    • .add(object) zgłasza wyjątek gdy Queue jest pełna
    • .offer(object) ignoruje nowy obiekt gdy kolejka jest pełna
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]
Typy danych i wyjątki w Javie

Metody ArrayBlockingQueue

  • Użyj .remove() lub .poll() aby usunąć z głowy
    • .remove() zgłasza wyjątek gdy Queue jest pusta
    • .poll() zwraca null gdy Queue jest pusta
  • Nie dopuszcza 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
Typy danych i wyjątki w Javie

Czas na ćwiczenia!

Typy danych i wyjątki w Javie

Preparing Video For Download...