Sollte ich Double als Schlüssel in einer TreeMap verwenden?

8
___ qstnhdr ___ Sollte ich Double als Schlüssel in einer TreeMap verwenden? ___ answer11676585 ___
  

In HashMaps sollten keine Doppelpunkte verwendet werden, da sie für die Gleichheit schwer zu vergleichen sind.

  • Versuchen Sie jemals, map.get(key) die Werte basierend auf bestimmten Schlüsseln zu erstellen?

    • Wenn ja , dann gilt das Argument "schwer zu vergleichen" und Sie sollten diese Datenstruktur wahrscheinlich vermeiden (oder sich immer auf %code% / %code% / %code% verlassen und Bereiche der Karte holen).

    • Wenn nein (dh du tust normalerweise nur %code% oder iterierst über %code% ), würde ich sagen, dass du %code% als Schlüssel verwendest.

  

Bei den doppelten Werten handelt es sich um einen Haufen mathematischer Berechnungen, sodass die Wahrscheinlichkeit eines doppelten Werts extrem gering ist.

  • Ist es ein Bug wenn Sie tatsächlich ein Duplikat erhalten?

    • Wenn ja , dann ist es nicht die richtige Datenstruktur. Sie könnten zum Beispiel eine %code% stattdessen aus Guava.

    • Wenn no , (dh es spielt keine Rolle, auf welchen der beiden Werte es zutrifft, weil sie sich sowieso nur durch ein kleines Epsilon unterscheiden können), dann sollte es Ihnen gut gehen.

___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123sorting ___ Das Sortieren ist der Vorgang, bei dem eine Reihenfolge auf eine Objektgruppe angewendet wird. ___ tag123collections ___ Auflistungs-APIs stellen Entwicklern eine Reihe von Klassen und Schnittstellen zur Verfügung, mit denen die Sammlung von Objekten vereinfacht wird. ___ answer11676598 ___

Wenn sie nur sortiert werden sollen, gibt es bessere Sammlungen (zum Beispiel %code% ). Sie können auch eine beliebige Liste verwenden und die Dienstprogramme zum Sortieren verwenden (ich denke, sie sind in %code% ).

Verwenden Sie Maps und Tabellen nur, wenn Sie direkt auf einen Eintrag mit seinem Schlüssel zugreifen möchten.

    
___ tag123treemap ___ Eine Implementierung eines Mappings (Dictionary) unter Verwendung eines Baumes. Dieses Tag wird auch für das Treemapping verwendet, eine Informationsvisualisierungsmethode zum Anzeigen hierarchischer Daten mit verschachtelten Rechtecken. ___ answer11676594 ___

Das Problem mit Doppelpunkten in Baumkarten ist genau das gleiche wie bei Doppelpunkten in der Hash-Map - Vergleich für Gleichheit. Wenn Sie Aufrufe von %code% vermeiden und stattdessen mit Bereichsabfragen bleiben (z. B. mithilfe von %code% ), sollten Sie in Ordnung sein.

%Vor%

Dies druckt

%Vor%

Sehen Sie sich dieses Snippet auf ideone an.

    
___ answer11676752 ___

Wenn Sie sie nur sortieren möchten, ist es am besten, ein Wrapper-Objekt um das Double und das Objekt zu erstellen, die "vergleichbare" Schnittstelle auf diesem Wrapper zu implementieren und eine einfache Auflistung zu verwenden, um sie zu sortieren     

___
MalcolmOcean 26.07.2012, 19:20
quelle

4 Antworten

13
  

In HashMaps sollten keine Doppelpunkte verwendet werden, da sie für die Gleichheit schwer zu vergleichen sind.

  • Versuchen Sie jemals, get die Werte basierend auf bestimmten Schlüsseln zu erstellen?

    • Wenn ja , dann gilt das Argument "schwer zu vergleichen" und Sie sollten diese Datenstruktur wahrscheinlich vermeiden (oder sich immer auf tailMap / headMap / submap verlassen und Bereiche der Karte holen).

    • Wenn nein (dh du tust normalerweise nur for (Double key : map.keySet()) ... oder iterierst über entrySet ), würde ich sagen, dass du Double als Schlüssel verwendest.

  

Bei den doppelten Werten handelt es sich um einen Haufen mathematischer Berechnungen, sodass die Wahrscheinlichkeit eines doppelten Werts extrem gering ist.

  • Ist es ein Bug wenn Sie tatsächlich ein Duplikat erhalten?

    • Wenn ja , dann ist es nicht die richtige Datenstruktur. Sie könnten zum Beispiel eine Multimap stattdessen aus Guava.

    • Wenn no , (dh es spielt keine Rolle, auf welchen der beiden Werte es zutrifft, weil sie sich sowieso nur durch ein kleines Epsilon unterscheiden können), dann sollte es Ihnen gut gehen.

aioobe 26.07.2012, 19:24
quelle
1

Das Problem mit Doppelpunkten in Baumkarten ist genau das gleiche wie bei Doppelpunkten in der Hash-Map - Vergleich für Gleichheit. Wenn Sie Aufrufe von treeMap.get(myDouble) vermeiden und stattdessen mit Bereichsabfragen bleiben (z. B. mithilfe von submap ), sollten Sie in Ordnung sein.

%Vor%

Dies druckt

%Vor%

Sehen Sie sich dieses Snippet auf ideone an.

    
dasblinkenlight 26.07.2012 19:24
quelle
1

Wenn Sie sie nur sortieren möchten, ist es am besten, ein Wrapper-Objekt um das Double und das Objekt zu erstellen, die "vergleichbare" Schnittstelle auf diesem Wrapper zu implementieren und eine einfache Auflistung zu verwenden, um sie zu sortieren     

cporte 26.07.2012 19:35
quelle
0

Wenn sie nur sortiert werden sollen, gibt es bessere Sammlungen (zum Beispiel SortedSet ). Sie können auch eine beliebige Liste verwenden und die Dienstprogramme zum Sortieren verwenden (ich denke, sie sind in java.util.Collection ).

Verwenden Sie Maps und Tabellen nur, wenn Sie direkt auf einen Eintrag mit seinem Schlüssel zugreifen möchten.

    
SJuan76 26.07.2012 19:25
quelle

Tags und Links