Proste typy sparametryzowane (generics)
Zadanie 8 (7p)
Stworzyć klasę Box
reprezentujacą obiekty-zestawy elementów porównywalnych wraz operacjami
na nich. Elementy zestawu są jednego, ale dowolnego typu. W danym zestawie, każdy element zajmuje
określoną, unikalną pozycję. Porządek między
elementami (obiektami) danego typu (klasy) jest określany przez implementację
sparametryzowanej
wersji interfejsu Comparable
w klasie obiektów (zob. dokumentację
klasy java.lang.Comparable).
Klasa Box powinna
posiadać między innymi następujące metody:
a. add - dodaje
element do zestawu, o ile nie było go w zestawie przed operacją,
b. addAll - dodaje
elementy podanej tablicy elementów do zestawu, o ile nie było ich w
zestawie przed operacją,
c. delete - usuwa
element z zestawu, o ile wystapił on w zestawie przed operacją,
d. swap - zamiana
elementów w zestawie na dwóch podanych pozycjach,
e. min (max) - znajdowanie (bez
sortowania) minimum (maksimum) zestawu zgodnie ze zdefiniowanym
porządkiem,
f. search -
sprawdzanie, czy podany element znajduje się w zestawie,
g. print - wyświetla
wszystkie elementy zestawu.
W celu testowania, uczynić elementy typu Osoba (z zadania 3) oraz Figura (z zadań 4-5)
porównywalnymi według następujących kryteriów uporządkowania:
a. wśród elementów typu Osoba
porównujemy najpierw nazwiska, w dalszej kolejności wiek,
b. wśród elementów typu Figura
porównujemy najpierw wartości pola, w dalszej kolejności wartości
obwodu.
Test
Wykonać test wszystkich metod klasy Box. Przykładowo, poniższy kod
powinien się kompilować oraz dawać poprawne wyniki.
Box<Osoba> bo =
new Box<Osoba>();
bo.add(new Osoba("Kowalski",
19));
// nazwisko, wiek
bo.add(new Student("Kowalska",
18, 100)); // nazwisko, wiek, grupa
bo.add(new Student("Kowalska",
20, 200));
Osoba[] to = new Osoba[] {new
Osoba("Nowak", 21), new Student("Nowak", 22, 200)};
bo.addAll(to);
bo.print();
System.out.println(bo.min()); // Student 1: Kowalska,
18, 100
Box<Figura> bf = new
Box<Figura>();
bf.add(new Kolo(10,10,40));
bf.add(new
Prostokat(10,10,40,40));
Figura[] tf = new Figura[]{new
Prostokat(0,0,50,50), new Kolo(0,0,50)};
bf.addAll(tf);
bf.print();
System.out.println(bf.max()); // Kolo - srodek (0,0),
promien 50
Box<Integer> bi = new
Box<Integer>();
Integer[] ti = new Integer[] {new
Integer(1), 2, 3};
bi.addAll(ti);
bi.print(); //
1, 2, 3
Box<String> bs = new
Box<String>();
String[] ts = new String[]
{"cpp", new String("java")};
bs.addAll(ts);
bs.swap(0,1);
bs.print(); //
java, cpp