PO, ćwiczenia
2020-05-27
TW
Drugie zadanie zaliczeniowe
Strona zadania: https://moodle.mimuw.edu.pl/mod/assign/view.php?id=16527 Termin: do 2020-06-06
Ciekawostka: dane dotyczące prawdziwych wyborów
https://sejmsenat2019.pkw.gov.pl/sejmsenat2019/pl/dane_w_arkuszach
Klasy anonimowe
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html abstract public class AbstractHello {
abstract protected String message();
public void say(){System.out.println("Hello:"+message());}
}
AbstractHello h = new AbstractHello() {
protected String message() { return “World”; } };
h.say();
Iteratory
https://www.geeksforgeeks.org/java-implementing-iterator-and-iterable-interface/
class CustomDataStructure<T> implements Iterable<T> { public Iterator<> iterator() {
return new CustomIterator<>(this);
} } użycie:
for(Integer i : s) { ... }
for(Iterator<Integer> it = s.iterator(); it.hasNext();) { Integer curr=it.next(); … }
Iteratory - przykład
Zadanie - zbiór kolekcji
Chcemy utrzymywać zbiór różnych kolekcji nad wybranym typem.
Wymagane operacje:
- dodawanie / usuwanie kolekcji
- iteracja po wszystkich elementach kolekcji
Zadanie - zbiór kolekcji
Przykład użycia:
WYNIK:
Zadanie - zbiór kolekcji
Problemy:
● jak uniknąć duplikacji kodu i maksymalnie wykorzystać iteratory z kolekcji
● jak obsługiwać puste kolekcje?
Zadanie - zbiór kolekcji - iterator
Zadanie - Tablica z filtrowaniem
Potrzebujemy kolekcji z dodatkową metodą filter
Zadanie - Tablica z filtrowaniem - rozwiązanie
Zagadka: dlaczego InteliJ zaznaczyło pętlę for? Rozwiązanie za kilka slajdów.
Zadanie - Tablica z filtrowaniem - przykład użycia
Zagadka:
dlaczego potrzebna jest dodatkowa zmienna j?
Zadanie - Tablica z filtrowaniem - przykład użycia 2
Zadanie - Zwykła tablica - przykład użycia
Zadanie - Zwykła tablica - przykład użycia - prościej
Uwaga! tu przeciwny warunek
Rozwiązania
https://drive.google.com/file/d/1QWA_zEQPTB43ay_iZ0miEifJ25ZqqylP/view?usp
=sharing
- stos z iteracją - zbiór kolekcji - filtrowanie
Zadanie domowe
BSTImmutableSet
- zwyczajne drzewo BST
- jednak każda operacja add/remove zwraca reprezentację nowego zbioru - Immutable oznacza, że możemy cały czas odwoływać się do reprezentacji
starych wersji drzewa
- oczywiście chcemy zaimplementować add/remove jak najbardziej efektywnie (czyli bez kopiowania wszystkich elementów)
https://en.wikipedia.org/wiki/Persistent_data_structure
https://hackernoon.com/how-immutable-data-structures-e-g-immutable-js-are-opti mized-using-structural-sharing-e4424a866d56