«« ( Date ) »» // «« ( Thread ) »» // nastava - 2003

Re: ArrayIndexOutOfBoundsException

by Damjan S. Vujnovic
utorak, 29. jul 2003 - 17:15.

Kako europejski standardi kazu da je moje zvanicno radno vreme upravo isteklo, bicu slobodan i dati svoje vidjenje citave stvari. Znaci, TreeMap objekte cuva, kao sto je i logicno, u nekakvom pretrazivackom stablu i potrebno je da medju objektima postoji neka relacija uredjenosti. To izvodis onako kako sam ti rekao u proslom mailu (ili implementiras Comparable ili nasledis Comparator, bolje ono prvo), ali ono sto je bitnije je da su ti sve operacije na TreeMap slozenosti O(h), gde je h visina drveta (priblizno log n, gde je n broj objekata). Ono sto ti (verovatno) prvo pada na pemet, da poredjenje definises kao prosto poredjenje id-ova je uzasno glupo jer ces najverovatnije objekte ubacivati onim redom kojim ih i pravis, pa ce oni imati rastuce id-eve, pa ces imati puno cepanja stabla - neefikasno (posto je implementacija TreeMap neka vrsta balansiranog stabla, ne dozvoljava da se degenerise u listu).

A sa druge strane, kad pogledas, TreeMap je pogresan izbor strukture jer ti nikada (barem se meni tako cini, ispravi me ako gresis) neces imati potrebe za izdvajanje intervala kljuceva ili za sortiranjem. Zato je mnogo bolje da koristis HashMap, sve operacije su ti slozenosti O(1) i nema potrebe da implementiras bilo kakva poredjenja. Pretrazivanje ti je prakticno obican ulazak u Hash tabelu. Funkciju

int hashCode()

ne treba da preklapas, osim ako ne preklapas i

boolean equals(Object obj)

anyway, pogledaj dokumentaciju, ovde se cesto gresi (i zato se cesto provlaci po interview-ima). Ako imas Ekela pogledaj tamo, detaljno je objasnjeno...

My 2 cents,
Damjan
----- Original Message -----
From: Zarko Acimovic
To: Razno
Sent: Tuesday, July 29, 2003 3:38 PM
Subject: [nastava] ArrayIndexOutOfBoundsException


Postovani,
pravim jedan mali primer za nekoga ko radi domaci iz DRS-a za septembar.
Pravim zapravo najdebilniju klijent-server varijantu za LAN, ali mi nesto ne uspeva.
Naime, klijent salje serveru ID tiketa i salje ga kao serijalizovani objekat, a onda server pristupa kolekciji tiketa i na osnovu primljenog ID-a salje klijentu tiket, koji je takodje serijalizovan.

E sad ja cuvam tikete u TreeMap: u instance klase TreeMap (koja je iz java.util.*) mogu da se umecu bilo kakvi objekti, ali po nekom kljucu. Moj kljuc je ID, a objekti su tiketi.

Ono sto je problem je sto ja stalno u Forte 4 Java dobijam ArrayIndexOutOfBoundsException
iako ja nigde ne koristim nikakav Array.

S druge strane, kad program ne pokrecem u Forte-u vec samo uz pomoc Java SDK, sve se dobro iskompajlira, ali se tokom izvrsavanja sistem zablokira kad "obmotavam" sock.getInputStream() i sock.getOutputStream()
sa ObjectInputStream i ObjectOutputStream. Ako je ovo malo nepoznato, poslednja dva se koriste kada hocemo objekat da saljemo i citamo preko mreze.

Da li neko ima ideju gde je greska?

Zare