2016-05-14 4 views
5

Einige Testfälle schlagen in meiner Anwendung fehl, was von der Einfügereihenfolge der Elemente abhängt. Es wird verwendet in Java 7 gut zu funktionieren, aber das Problem begann, nachdem 8. Java Upgrade Während Internet-Suche ich dies in einem article gefunden:Problem beim Sortieren beständiger Elemente beim Iterieren von HashMap in Java 8

:

Java 8 einige mögliche Änderungen an HashSet/Map Iterationsreihenfolge enthält

Können mir einige bitte vorschlagen - wie kann ich die Objekte in einer Map in derselben Reihenfolge wie die Reihenfolge der Insertion in die Map iterieren, in Anbetracht dessen würde ich immer noch Java 1.8 in meiner Entwicklungsumgebung verwenden?

Ja natürlich es wurde nie von HashMap sicher sein, dass die Objekte in der gleichen Reihenfolge abgerufen werden können, aber ja, es verwendet in Java arbeiten 7.

Hat LinkedHashMap Arbeit dies zu implementieren?

+1

Was sagt Ihnen die 'LinkedHashMap'-Dokumentation? – RealSkeptic

+6

Haben Sie überprüft, was Java 7 'HashMap' Dokumentation sagt?: Https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html: ** Diese Klasse übernimmt keine Garantie für die Reihenfolge der Karte; insbesondere garantiert es nicht, dass der Auftrag im Laufe der Zeit konstant bleibt. ** Sie müssen andere Sammlung verwenden, die den Auftrag garantiert - LinkedHashMap – krokodilko

+1

Verwenden Sie eine 'TreeMap' anstelle von der javaDocs: Eine Rot-Schwarz-Baum basierte NavigableMap-Implementierung. Die Map wird nach der natürlichen Reihenfolge ihrer Schlüssel sortiert oder nach einem Comparator, der bei der Erstellung der Map zur Verfügung gestellt wird, abhängig davon, welcher Konstruktor verwendet wird. –

Antwort

8

Ja, Sie müssen LinkedHashMap verwendet werden, die auch über Java-Versionen eine stabile Iterationsreihenfolge hat, durchgesetzt, wie durch seine contract:

Diese Implementierung von HashMap unterscheidet sich darin, dass sie eine doppelt verknüpfte Liste über alle unterhält läuft seiner Einträge. Diese verkettete Liste definiert die Iterationsreihenfolge, bei der es sich normalerweise um die Reihenfolge handelt, in der Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge). Beachten Sie, dass die Reihenfolge der Anzeigen nicht betroffen ist, wenn ein Schlüssel erneut in die Karte eingefügt wird.

Bei mehreren Gelegenheiten brauchten wir auch wiederholbare Iterationsreihenfolge über verschiedene Java-Versionen und funktionierte gut.


TreeMap wäre auch eine Lösung für eine stabile Iterationsreihenfolge sein. Natürlich hat es eine logarithmische Operationszeit (wie in LinkedHashMap ständigen gegen) und die Iteration Reihenfolge ist nicht Einsetzfolge aber Schlüssel Reihenfolge:

Die Karte nach der natürlichen Ordnung des Schlüssels geordnet ist, oder durch Ein Komparator wird normalerweise zur Zeit der sortierten Kartenerstellung bereitgestellt.

Verwandte Themen