Lekcja 2

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 listą obiektów o zadanym typie.
Do klasy będzie można dodać obiekt zadanego typu.

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();

Zadanie 1

Utwórz program, który za pomocą klasy Scanner będzie czytał kolejne liczby z klawiatury do listy. Gdy program otrzyma 0, program pokaże:

  • najmniejszą liczbę
  • największą liczbę
  • średnią liczb
  • medianę
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 2

Dany jest plik, który zawiera następującą treść:


Polska 2

Hiszpania 3

Polska 1

Niemcy 10

Włochy 123

Chiny 40

Chiny 78


Twoim zadaniem jest zagregowanie tych informacji, aby wyświetlić sumę liczb przy danym kraju.

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)

Zadanie 3

Napisz program, który wygeneruje strukturę uczelni jako: uczelnia składa się z grup, do której należą studenci.

Uczelnia, grupy i studenci to klasy, do których dodaj pola, które będą pseudolosowane na poziomie konstruktora.

Na koniec wypisz strukturę uczelni do tabeli w pliku .csv.