Frage zu Datentyp

Hallo,

ich habe Daten, die ich in einem Int-Array speichere (z.B. [0,1,1,0,2,0,0,1]). Zu jedem solchem Array gibt es einen Int-Wert, ich will jetzt möglichst effizient für jedes Array diesen Wert speichern. Also ich habe z.B.

[0,1,1,0,2,0,0,1] : 10
[1,1,1,1,1,0,0,1] : 5
[2,1,1,2,2,2,2,1] : 14

Ich habe mir gedacht ich mache es mittels einer Hashmap, damit ich leicht auf die Zahl zugreifen kann, die zu einem bestimmten Array gehört.

Wenn ich aber folgendes mache:

hashmap.put(„array als key“, „zahl als value“);

und dann

hashmap.get(„array“);

dann kriege ich nie den Wert für ein Array raus, auch wenn dieses schon enthalten ist. Ich denke das Problem ist, dass das Array als Objekt darin gespeichert ist, und das neue Array ein anderes Objekt ist, das dann nicht als Schlüssel erkannt wird.
Im Moment schreibe ich das Array in einen String um und speichere diesen dann als Schlüssel, damit funktioniert es. Ich will aber auf die zeitaufwendige Umwandlung verzichten.

Hat jemand einen Tip? Das ganze sollte leider mit Java 1.4 funktionieren…

Kurzfassung meines Problems: ich habe Integer-Arrays denen eine Zahl zugeordnet ist, und will möglichst schnell die zugeordnete Zahl für ein Array abfragen können.

Grüsse, Chris

Hallo.

Kurzfassung meines Problems: ich habe Integer-Arrays denen
eine Zahl zugeordnet ist, und will möglichst schnell die
zugeordnete Zahl für ein Array abfragen können.

Hm, du könntest eine eigene Klasse machen, die das Array enthält und die Methode „int hashCode()“, die von der Klasse Object geerbt wird, überschreiben mit einer eigenen Variante, die aus dem Array einen Hash berechnet. Zusätzlich musst du vermutlich „boolean equals(Object)“ überschreiben, damit das genau dann true liefert, wenn die Arrays übereinstimmen. Wenn du dann Objekte dieser Klasse als key für die Hashmap nutzt, sollte es eigentlich klappen.

Sebastian.

Danke, so werd ich es machen. Hat jemand einen Vorschlag für eine Hashfunktion, die möglichst schnell und gleichzeitig möglichst kollisionsfrei ist?

Schnell würd es ja z.B. mit sowas gehen:
hash = hash + array[i]*zahl;

Aber da vor allem 0en und 1en in den Arrays vorkommen glaub ich nicht, dass diese Methode sehr kollisionsfrei ist…

Grüsse, Chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo.

Danke, so werd ich es machen. Hat jemand einen Vorschlag für
eine Hashfunktion, die möglichst schnell und gleichzeitig
möglichst kollisionsfrei ist?

Schnell würd es ja z.B. mit sowas gehen:
hash = hash + array[i]*zahl;

Aber da vor allem 0en und 1en in den Arrays vorkommen glaub
ich nicht, dass diese Methode sehr kollisionsfrei ist…

Da würde ich das an das Binärsystem anlehnen:
hash mit 0 initialisieren und dann über alle Arrayeinträge berechnen:
hash += array[i]