ich eine HashSet
für reelle Zahlen erstellen möchten (derzeit Double
s) eine definierte Toleranz mit (epsilon
), (cf Assert.assertEquals(double, double, double)
Da nur mit Double.equals()
zur exakten Gleichheit funktioniert und Double
ist eine endgültige Klasse Ich kann es nicht verwenden Meine ursprüngliche Idee ist es, HashSet
(zB DoubleHashSet
) mit einer setEpsilon(double)
Methode zu erweitern und eine neue Klasse ComparableDouble
zu erstellen, wobei equals()
diesen Wert von DoubleHashSet
verwendet.Aber ich möchte überprüfen, ob es bestehende Lösungen gibt bereits vorhandene und vorhandene F/OSS-BibliothekenErstellen eines HashSet für Doubles
(In th Die Zukunft möchte ich auf Tupel reeller Zahlen ausdehnen - z. Rechtecke und Würfel - so ein allgemeiner Ansatz ist vorzuziehen
HINWEIS: @ NPE hat vorgeschlagen, dass es unmöglich ist. Leider vermute ich das formell richtig ist :-) Also ich frage mich ob es approximative Methoden gibt ... Andere müssen dieses Problem gehabt haben und es ungefähr gelöst haben. (Ich benutze bereits regelmäßig ein Werkzeug Real.isEqual(a, b, epsilon)
und es ist sehr nützlich.) Ich bin bereit, einige seltene Fehler der Transitivität zu akzeptieren.
HINWEIS: Ich verwende ein TreeSet als das löst das Problem von "fast gleich()". Später werde ich komplexe Zahlen, Rechtecke (und komplexere Objekte) vergleichen und es ist wirklich nützlich, ein Limit zu setzen, innerhalb dessen 2 Dinge gleich sind. Es gibt keine einfache natürliche Reihenfolge von complexNumbers (vielleicht würde ein Cantor-Ansatz funktionieren), aber wir können sagen, ob sie nahezu gleich sind.
Sie scheinen hier auf der richtigen Spur zu sein. Doppelter Ausbau und Bereitstellung Ihrer gleichwertigen Implementierung scheint der richtige Ansatz zu sein. – anubhava
@anubhava OK - Ich werde etwas Dummy-Code für den Kommentar hinzufügen –
@anubhava haben Code entfernt, wie die anderen Antworten es ersetzen –