HashMapa
PUT
( disclaimer : bucket == LinkedLista ) ; HashCode moze da bude isti za 2 elementaPredstavlja implementaciju MAP interfejsa. Omogucava nam da vrednosti KEY i VALUE budu NULL. Ne garantuje nam da ce redosled unetih vrednosti biti redosled cuvanja elemenata u memoriji.Map<String,Integer> map = new HashMap<>();
<> - Diamond brackets ; nakon Java 7 ih po defaultu mozemo ostaviti prazne jer sta smo definisali u prvim <> se podrazumeva i za drugeNakon ovog poziva, na HEAP-u se pravi niz BUCKET-a i svaki bucket predstavlja jedan cvor koji ustvari predstavlja jednu LinkedListu. Kada zelimo da dodamo neki element u mapu, to radimo :map.put("Uros", 20);Prva stvar koja se radi, jeste da se racuna HashCode kljuca. On nam sluzi kako bi cuvali taj element u odredjenom bucketu sa odredjenim indeksom u strukturi. Kljuc "Uros" ce se uz pomoc HashCode-a pretvoriti u neki Integer, npr : 123412321. Sad ukoliko zelimo da sacuvamo vrednost u bucketu na tom indeksu, morali bi da napravimo ogroman niz ( samo da bi mogli da ga sacuvamo na tom indeksu je l). Da bi problem zaobisli resavamo ga tako sto taj Integer ( u ovom slucaju 123412321 ) provlacimo kroz neku modularnu operaciju, gde cemo kao rezultat dobiti neki relativno mali broj, koji ce predstavljati indeks bucketa na kom se cuva vrednost. Informacije koje se cuvaju u bucketu su : 1. key
2. value
3. hashCode
4. next()
Scenario : Dodali smo jedan element u mapu. Ukoliko zelimo da dodamo novi element, i on proizvede isti HashCode kao i prethodno dodati, postavljamo pokazivac prethodnog elementa da pokazuje na trenutno dodati ( pokazuje na njegovu memorijsku lokaciju ).
Kada dodajemo key koji je NULL, to odlazi u bucket sa indeksom 0GET
Odradimo operaciju tipa : map.get("Uros");
Kao i kod PUT operacije, prva stvar koja se radi je to da se pretvara kljuc u HashCode, dobijamo onaj veliki Integer koji prolazi kroz onu modularnu operaciju, i na kraju svega dobijemo indeks bucketa kome treba da pristupimo. Proveravamo da li u bucketu ima postojecih cvorova kojima moze da se pristupi. Ukoliko ih recimo imamo vise, pristupamo prvom, i proveravamo da li im se kljucevi poklapaju. Ukoliko se ne poklapaju, uzima se pokazivac na sledeci cvor ukoliko postoji, ukoliko ne vraca nam Exception. Ukoliko se poklapaju, vraca nam vrednost i tu se operacija zavrsava.