Witam!
Po długiej przerwie w kontaktach z javą (dosć mocno się na siebie pogniewaliśmy, ciche dni trwały niemal 4 lata) potrzebuję pomocy w wykonaniu zadania dotyczącego Hashmap.
Próbowałem sobie conieco przypomnieć na podstawie różnych prezentacji/ nagrań na youtube/ publikacji i fragmentów kodów znalezionych w internecie, jednak nie wiem co z czym połączyć i co gdzie zamieścić, dlatego proszę o pomoc.
Zadanie: MyHashMap
W załączniku znajdziesz klasę MyHashMap. Klasa ta już zawiera:
- Student[] array; - W tej tablicy dane powinny zostać zapisywane.
- public MyHashMap (int capacity) – Ten konstruktor tworzy tabelę hash z podanym rozmiarem.
- int hashFunction (Student t) – Ta metoda oblicza wartość hash studenta.
Nie zmieniaj powyższych metod. Zmień tylko te, które zawierają komentarz //TODO: Your code here.
Tabela hash powinna móc pomieścić obiekty klasy Student. Jako funkcja hash powinno zostać użyte: h(s)=|(k mod n)|, gdzie k to hashCode() klasy Student, a n to pojemność tabeli hash.
Kolizje powinny zostać rozwiązane przez sondowanie liniowe (nie separacje łańcuchowe!) z rozmiarem czcionki 1.
Twoje rozwiązanie nie potrzebuje implementacji dodatkowych bibliotek.
- Zaimplementuj MyHashMap.add(Student s) – Zaimplementuj metodę void add (Student s) w klasie MyHashMap, która dodaje obiekt typu Student. Obiekt powinien zostać zapisany w arrayu. W przypadku, gdy tabela hash jest pełna, metoda powinna wyrzucić RuntimeException. W przypadku, gdy student jet już dodany do tabeli hash, metoda znowu powinna wyrzucić RuntimeException.
- Zaimplementuj MyHashMap.contains(Student s) – Zaimplementuj metodę boolean contains (Student s) w klasie MyHashMap, która zapewnia, czy Student s istnieje w tabeli hash (wskazówka: użyj Student.equals(Student s)). W przypadku, gdy Student s istnieje w tabeli hash, metoda powinna dać true, a w innym wypadku false.
- Zaimplementuj MyHashMap.remove(Student s) – Zaimplemntuj metodę void remove (Student s) w klasie MyHashMap, która objekt typu Student usuwa z tabeli hash. W przypadku, gdy student nie może ozstać odnaleziony w tabeli, metoda powinna wyrzucać RuntimeException.
- Zaimplementuj MyHashMap.getNumberStudentsWithHashvalue(int h) – Zaimplementuj metodę int getNumberStudentsWithHashvalue(int h) w klasie MyHashMap, która zwraca, ile studentów w tabeli hash ma wartość hash h.
- Zaimplementuj Implementiere MyHashMap.resize() – Zaimplementuj metodę void resize () w klasie MyHashMap, która podwaja rozmiar (pojemność) tabeli hash. Stwórz do tego nowy array i rozdziel elementy starej tabeli hash do nowej.
dodatkowo zamieszczam w załączniku plik, który dostaliśmy aby na nim pracować.
Z góry dzięki za wszelkie wskazówki oraz jakąkolwiek pomoc!