2017-01-21 4 views
-1

Map (oder HashMap) braucht konstante Zeit für Einfügen, Entfernen und Abrufen. Während alle anderen Datenstrukturen, die ich bisher kenne, keine konstante Zeit benötigen und ihre Zeit für die obigen Operationen von der Größe der Eingabe abhängt.Warum brauchen wir andere Datenstrukturen als HashMap?

Warum brauchen wir also alle anderen Datenstrukturen? Ist HashMap keine universelle Datenstruktur?

+0

'Ist das nicht HashMap ist universelle Datenstruktur

  • , wenn Sie eine Reihe von Dingen brauchen' - nein, es nicht erhalten Elemente bestellen und erlaubt nicht nach Duplikaten und Lassen Sie nicht auf Elemente durch Index zugreifen und ... – rkosegi

  • +0

    Versuchen Sie Go lernen, wo Karten sind im Grunde die einzige integrierte Datenstruktur (abgesehen von Arrays). Sie * können * einfach Karten für Dinge verwenden; aber die Neuigkeit, ein Set mit einer Map * noch einmal zu implementieren *, läuft ziemlich schnell ab. –

    +0

    Wo haben Sie gelernt, dass Insert, Remove und Retrieve dauernd dauern? [Diese Implementierung bietet eine konstante Leistung für die grundlegenden Operationen (get und put), vorausgesetzt, die Hash-Funktion verteilt die Elemente korrekt zwischen den Buckets.] (Https://docs.oracle.com/javase/8/docs/ api/java/util/HashMap.html) und Sie können keine Hash-Funktion angeben, aber der eingebaute Typ des Typs wird verwendet ... – TheConstructor

    Antwort

    1

    Die Karte Leistung ist nicht kostenlos, die Kosten sind Speicher und Komplexität.

    Andere Datenstrukturen gibt es für alle Fälle, in denen Sie sich nicht um Performances kümmern und wenn Sie nicht nur auf ein Element der Sammlung zugreifen müssen.

    Zum Beispiel, wenn Sie eine gegebene Liste von Elementen haben, und die einzige Verwendung in Ihrem Code ist, genau diese Liste von Elementen auszudrucken, ist die beste Wahl, ein Array von Strings zu verwenden.

    Ein anderes Beispiel könnte die Reihenfolge der Elemente sein. Wenn Ihnen die Reihenfolge Ihrer Elemente wichtig ist, dann ist eine Karte nicht die Datenstruktur, die Sie verwenden sollten, da die Bestellung nicht garantiert ist. Sie müssen also jedes Mal sortieren, wenn Sie möchten.

    Das sind nur zwei Beispiele, es gibt viele andere für jede vorhandene Datenstruktur.

    +0

    "wo man sich nicht um Performances kümmert" man benutzt unterschiedliche Datenstrukturen, wenn man sich um die Performance kümmern muss.Zum Beispiel können Sie eine 'List ' mit einer 'Map ' emulieren (wie JS mit Arrays). Aber die Leistung wäre viel schlechter als mit 'ArrayList'. –

    +0

    @AndyTurner esp, wenn die Indizes beim Einfügen oder Entfernen geändert werden sollen. –

    +0

    @AndyTurner Ich meinte Leistungen im Zugriff auf den Wert, als das OP fragte. –

    0

    HashMap sollte nicht verwendet werden, wenn

    • ein einfaches Java-Objekt würde die Arbeit machen. Java-Objekte sind typsicher und effizienter.
    • wenn Sie eine sortierte Sammlung benötigen.
    • wenn der Schlüssel ein Enum ist.
    • wenn der Index ein int beginnend mit 0 ist.
    • wenn der Schlüssel könnte sich ändern.
    • wenn Sie gleichzeitig Zugriff wünschen.
    • , wenn Sie eine Bestellung oder Priorität in Ihrer Sammlung benötigen. (Keine Werte sind also dort)