Hash von doubles generieren

TitusTiger

Neues Mitglied
Hallo,
ich habe eine Liste von doubles und müsste einen Hash daraus generieren, um jede Liste nur einmal zu haben.
Ich habe mich für Arrays.hashCode(new double[]{}) entschieden. Allerdings gibt es ein massives Problem:

System.out.println("Hashcode of [+40, -50]: " + Arrays.hashCode(new double[]{+40, -50}));
System.out.println("Hashcode of [-40, +50]: " + Arrays.hashCode(new double[]{-40, +50}));

Ungünstigerweise kommen beide Listen auf den gleich Hash-Wert:
Hashcode of [+40, -50]: -2004548671
Hashcode of [-40, +50]: -2004548671

Das ist in meinem Fall schlecht. Kennt jemand eine Möglichkeit einen sicheren / eindeutigen Hash zu bilden? Mit "Hash" mein ich ein eindeutiges Objekt. Was auch geht ist einen String zu bilden: 40_-50 und -40_50, jedoch ist diese Methode bedingt durch die String-Operationen sehr langsam wenn man viele Listen von doubles hat.

Vielen Dank
 
Hallo,
vielen Dank. Ich probiere das mit dem CRC einmal aus. Mit dem Array.equals wird theoretisch auch gehen, allerdings passt das nicht ganz zu meinem Anwendungsfall:

Ich erhalte eine große Anzahl an double[3] Arrays (Koordinaten) und möchte sie jeweils nur einmal speichern. D. h. vor jedem Einfügen müsste ich alle bisher eingefügten Einträge einmal durchgehen und jedes neue Array mit allen bestehenden vergleichen.
Ich erhoffe mit dem Speichern der Hash- / CRC-Werte eine bessere Performance.

Vielen Dank und viele Grüße
 
du kannst ja erstmal mit dem hash vergleichen und wenn der hash gleich ist, zusätzlich noch mit equals vergleichen.
Da der hassh in den meisten fällen verschieden sein wird, fällt die überprüfung mit equals direkt weg
 
Ich meine mal gelesen zu haben dass die Wahrscheinlichkeit dass der Hash gleich ist bei dem Verfahren bei ungefähr 10^-50 so etwa liegt. Da muss man den equals-Zweig zwar programmieren aber für deine Performance spielt das absolut keine Rolle.

Edit: nein, ist Quatsch. Das haengt natuerlich von deinen Daten ab. Wenn die wirklich gleich sind kommt natürlich beliebig oft der gleiche Hash raus.
 

Zurück
Oben