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).
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.
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...
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.
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.
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 ;)
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"