Ich habe eine Java HashMap mit Float-Schlüssel und String-Werte. Jetzt, wo ein Float gegeben wird, der nicht in der HashMap ist, wie kann ich den Schlüssel finden, der dem gegebenen Float am ähnlichsten ist?Java HashMap finden am besten passenden Schlüssel
Antwort
Klingt wie ein Job für eine der Implementierungen von java.util.NavigableMap
.
+1 es ist so wertvoll, wenn die Leute antworten mit weniger verwendeten Dienstprogramme der Sprachen – kommradHomer
Gute Antwort, könnte man dann 'deckeKey (K-Taste)' und 'floorKey (K-Taste) 'um die zwei am nächsten liegenden Schlüssel zu bestimmen und zu berechnen, welcher näher ist. –
hört sich gut an. Ich arbeite mit Android SDK 2.1 ,, aber kann diese Schnittstelle nicht finden -.- –
Floats als Schlüssel in einer HashMap zu verwenden ist eine sehr schlechte Idee!
Warum ist das eine schlechte Idee? –
float ist kein integraler Wert. Sie müssen mit nicht offensichtlichen Berechnungsunterschieden umgehen. kleiner Unterschied im letzten Bit verursacht einen anderen Schlüssel und daher Ergebnis –
Ich denke, Sie sind besser mit einem einfachen Array/ArrayList
mit Einträgen nach dem Schlüssel sortiert und führen Collections.binarySearch()
. Wenn der Eintrag nicht gefunden wird, gibt er den nächsten Nachbarn zurück.
Der einfachste Weg
HashMap<Float, String> map = new HashMap<Float, String>();
Float newFloat = 123F;
Float minDif = null;
Float findedValue = null;
for (Float key : map.keySet()) {
Float dif = Math.abs(key - newFloat);
if (minDif != null) {
if (dif < minDif) {
minDif = dif;
findedValue = key;
}
} else {
minDif = dif;
findedValue = key;
}
}
ich Ihnen vorschlagen, absolut zu vermeiden, mit Schwimmern als Schlüssel ein 'HashMap' verwenden. – Jack
@Jack ist das, weil die Floats nicht genau genug sind und zwei ähnliche Werte den gleichen Hash-Wert geben können? – Lucas
Bitte definieren "am ähnlichsten" –