Lekcja 5

Generyczność, Listy, Mapy

Lekcja opisuje tworzenie i używanie klas, które pozwalają na przekazanie typu jako parametru. Mapy co prawda nie są strukturą danych, ale dla ujednolicenia możemy tak przyjąć na potrzeby zajęć.

I. Tworzenie klas z typem generycznym


Zadanie 0

Rozważmy klasę, która jest w stanie przechowywać obiekt typu String oraz Integer.


class StringWrapper {
    String value;
}
class IntegerWrapper {
    Integer value;
}

Klasy są bardzo podobne, chcielibyśmy zrobić coś bardziej ogólnego, stąd możemy skorzystać z zapisu z diamentem:

class Wrapper<T> {
    T value;
}
Wrapper<String> stringWrapper;
Wrapper<Integer> integerWrapper;

Stwórz klasę, która będzie tworzyć pole z tablicą obiektów o zadanym typie.
Rozmiar tablicy będzie określany przez parametr przekazany w konstruktorze.

II. Listy i mapy


Tablica Lista Mapa
Najszybsza Wolniejsza (dużo zmienia implementacja)
Trzeba podać rozmiar przy tworzeniu Rozmiar jest opcjonalny
Rozmiar jest stały Rozmiar zmienia się dynamicznie
Indeks obiektu jest liczbą Indeks jest dowolnym obiektem
Brak wsparcia dla diamentu Wymagany jeden parametr typu (wartość) Wymagane dwa parametry typu (indeks, wartość)
Omówienie podstawowych struktur - kolekcji Omówienie podstawowych struktur - kolekcji
Kod do obsługi list
// Tworzenie listy konkretnego typu
List<Integer> list = new ArrayList<>();

// Dodawanie elementu do listy
list.add(5);

// Pobieranie elementu zapisanego w liście
list.get(0);

// Sprawdzanie, czy element znajduje się w liście
list.contains(5);

// Nadpisanie wartości pod indeksem 0 na wartość 10
list.set(0, 10);

// Usuwanie elementu o wskazanym indeksie
list.remove(0);

// Usunięcie wszystkich elementów
list.clear();
Kod do obsługi map
// Tworzenie mapowania String w String
Map<String, String> map = new HashMap<>();

// Wstawienie wartości "Warszawa" pod klucz "Polska"
map.put("Polska", "Warszawa");

// Pobranie wartości pod kluczem "Polska"
map.get("Polska");

// Sprawdzenie, czy klucz "Japonia" istnieje
map.containsKey("Japonia");

// Pobranie zbioru istniejących kluczy
map.keySet();

// Usunięcie klucza (więc i wartości)
map.remove("Polska");

// Usunięcie wszystkich wartości
map.clear();
Zadanie 1

Stwórz klasę Rectangle (x, y, width, height, color).

Następnie klasę, która będzie przechowywać listę prostokątów.
Klasa ta będzie uruchamiać wątek, który co 10 sekund będzie dodawać
pseudolosowo wygenerowany prostokąt.
Możesz ją nazwać np. RectangleContainer.

Napisz klasę okna, która będzie zawierać w sobie kontener prostokątów.
Zadaniem okna jest wyświetlać wszystkie prostokąty.

Zadanie 2

Stwórz klasę QuotationFrame.

Zadaniem tej klasy jest wyświetlanie cytatów w oknie.
Tekst może być pobrany z pliku.
Cytowane osoby mogą mieć wiele cytatów,
stąd tekst należy wyświetlić podobnie jak na przykładzie poniżej.

Ekran listujący cytaty znanych pisarzy
Ekran listujący cytaty znanych pisarzy

III. Zagnieżdżanie struktur


Zagnieżdżanie struktur Zagnieżdżanie struktur
Zagnieżdżanie struktur (wersja kolorowa) Zagnieżdżanie struktur (wersja kolorowa)