[ y0gie @ 21.01.2003. 19:09 ] @
U svoj HashTable stavljam neke stvari koje upotrebljavaju ključ tipa Object. Ali problem je u traženju tih struktura sa Object ključem. Nikako da mi nađe bilo šta.

(Problem je u tome, da imam stvari koje trebaju biti sahranjene sa istim ključem u istom HashTable-u, zato ne mogu upotrebiti integer ili slično; samo object, jer se samo u nekom detajlu razlikuje jedan Object od drugog).
[ Dragi Tata @ 21.01.2003. 19:36 ] @
Kako misliš da je ključ Object? Ne vidim smisao toga. Možeš li da pokažeš na primeru šta si to uradio?
[ y0gie @ 21.01.2003. 20:00 ] @
public class CTGraphEdgeKey
{
...
}

evo problema:

CTGraphEdgeKey edgeKey = new CTGraphEdgeKey(y,x);
edge = (CTGraphEdge) edges[edgeKey];

ili ako ima drugo rešenje: Da stavljam više CTGraphEdgeKey u isti HashTable sa jednakim ključevima.
[ dotnet @ 21.01.2003. 20:46 ] @
Pozdrav

Na nacin koji si naveo jedino je moguce da trazis 'Value' sa instancom objekta koju si pre toga upisao u 'Hashtable', znaci kreiras objekat upises u 'Hashtable' i odma nakon toga pretrazujes i dobijes 'Value' za taj objekat. E sad pretpostavljam da bi svoju zamisao mogao da izvedes tako sto bi serializovao svaki objekat koji dodajes za 'Key', ali kao sto Tata kaze 'Ne vidim smisao toga'. Razmisli dal mozes nekako drugacije da organizujes stvar.
[ y0gie @ 21.01.2003. 21:09 ] @
hm...

nisam hteo skrenuti s puta ali izgleda da cu morati i sprogramirati svoj HashTable
[ -zombie- @ 22.01.2003. 17:30 ] @
verovatno neces morati.

nisam 100% siguran, ali ove kolekcije mi mnogo sumnjivo lice na Java2 kolekcije. ako je implementacja ista, moraces u tvojim objektima samo da implementirash equals() i hashCode() metode.

znaci, recimo:

Code:

public class CTGraphEdgeKey {
    int x, y;
    ...

    public int hashCode() {
        return x*y;
    }

    public boolean equals(Object o) {
        CTGraphEdgeKey k = (CTGraphEdgeKey) o;
        return ((k.x == x) && (k.y == y));
    }
}


znam da ovo mozda nije najsjajnija hash funkcija za tvoj primer (a ni ne znam primer) ali mislim da ce raditi. i ako ti x i y nisu int, uradi round(x*y) recimo...
[ Dragi Tata @ 22.01.2003. 18:07 ] @
Ako je to problem, onda treba preklopiti funkcije GetHashCode i Equals. Za GetHashCode je često prihvatljiv hack da se koristi ToString().GetHashCode(), mada je u tvom slučaju verovatno bolje x^y.

Uglavnom, jako nerazumljivo postavljaš pitanja, a i onaj kod mi nije preterano pomogao da shvatim u čemu je problem.
[ -zombie- @ 22.01.2003. 18:40 ] @
ok. a kako iskoristiti ToString().GetHashCode() kada klasa ima dve promenjive (ili vise) kao ova?

ili sta je najbolje koristiti za realne promenjive?
[ Dragi Tata @ 22.01.2003. 20:19 ] @
Funkcija ToString() vraća string koji "opisuje" dato stanje objekta (uglavnom da bi se olakšalo debagovanje) - znači očekivao bih da ispiše koliki su x i y. Znači, kad god su x i y jednaki, stringovi koje vraća ToString() su jednaki, a samim tim i hash koji se dobija od njih. Ovaj sistem se jako često koristi kad performanse nisu preterano bitne.

[ y0gie @ 22.01.2003. 20:39 ] @
izvinjavam se za moju nejasnost. Nisam dugo bio u Srbiji pa mi je teško složiti neke pametne rečenice.

evo ..da probam još jednom ako budem sad jasniji:
zombie / DDG: jest skoro isto ko Java

Moj je problem samo u tome, da trebam tražiti po HashTable sa ključem koji je tipa Object -> (CGraphEdgeKey). Ne sa integer, string,...

Probat ču i tvoj prjedlog, da vidim ima li šta na tome.

Hvala
[ -zombie- @ 23.01.2003. 00:09 ] @
dobro, probaj, ali ipak poslusaj i tatu (GetHashCode() i Equals())

DT: ToString() u .net vraca komplenu sadrzinu objekta po defaultu? samo primitiva ili sve? a podobjekti? a nizovi? u kom formatu? da li je ovo bash toliko korisno, ako ima 20tak primitiva u objektu. (mada je verovatno korisnije od javinog default toString() metoda ;)
[ Reljam @ 23.01.2003. 01:41 ] @
ToString uglavnom vraca string koji sadrzi tip promenljive. Postoje izuzetci (primitivni tipovi, stringovi, TextBoxovi, itd.), ali u opstem slucaju dobices nesto tipa "System.Object.TypeXXX"