[ Au197/79 @ 23.05.2003. 02:55 ] @
Napravio sam moju heš mapu čisto kao vežbu tako što sam nasledio AbstractMap i redefinisao-implementirao metode put, get i entrySet.

Problem je u tome što se remove metoda iz nadklase ne ponaša kako bi trebalo. Na test primeru ona za prosleđeni joj ključ nađe par koji treba da ukloni, vrati vrednost za taj ključ, ali ne ukloni par. Jednom rečju remove se ponaša isto kao get metoda!

Ja sam sam posle napisao remove metodu, ali mi se još uvek čini da sam bezveze radio ono što je posao nekog Sun-ovog programera.

Molio bih nekoga da mi razjasni zbog čega remove nije radilo kako je očekivano, a i kakva je veza sa metodom clear, jer ni ona ne radi ono što bi trebalo, kad remove zeza.

Sad primetih da brisanje za ključ null ne radi ni u jednoj realizaciji remove metode :(
[ sspasic @ 24.05.2003. 09:45 ] @
Imam utisak da nisi pažljivo pročitao šta entrySet treba da vrati.

Dakle, on treba da vrati Set čiji metodi
Set.remove, Set.removeAll, Set.retainAll, Set.clear
kao i Set.Iterator.remove moraju da uklanjaju elemente i iz mape.

Koliko sam video iz tvog source-a ti vraćaš kopiju skupa ključeva u HashSet,
tako da se oni metodi u stvari rade samo po ovoj kopiji ali ne dotiču mapu.

Mislim da nema druge nego da napraviš i svoj Set i njegov Iterator
(neka me ispravi neko ako zna jednostavniji način).

To možeš da uradiš ovako:
Za set možeš npr. da naslediš HashSet
a kod Iteratora moraš da implementiraš Iterator interfejs i
koristiš delegaciju na HashSet-ov iterator (pošto ti finalna Set.Iterator
klasa nije vidljiva).
Onda naslediš pomenute metode i dodaš im kod koji uklanja podatke i iz mape.

Naravno, može i sve od nule.
Ovo je i najzanimljiviji način, posto je već vežbanje u pitanju...

Inače, kada dodaješ svoje kontejnerske klase to skoro nikad ne može da prođe bez ovih dodatnih klasica, kako bi ispoštovao ono što u C++ zovu 'koncept'...
I ovo ne važi samo za Javu i samo za kontejnerske klase...
[ Au197/79 @ 24.05.2003. 15:36 ] @
U pravu si za grešku. A ja mislio da Brus Ekel ne greši u svojim kodovima :(

Ipak mi se čini da bi mi lakše bilo da redefinišem clear() i remove() koje jedine nešto brišu nego da se patim sa enterySet. Ovakav kakav je enterySet mi bobro služi za size(), containsKey() i ostale metode.