2017-05-18 4 views
1

Ich füge eine ArrayList in map ein (Objekt-ID als Schlüssel und Objekt als Wert).Hashmap, das den ersten Datensatz in den 12. Index einfügt

Die erste Einfügung erfolgt am 12. Index.

Da die Standardgröße 16 für HashMap ist, wird der vierte Datensatz in den ersten Index eingefügt. (Da Index zuletzt erreicht, bedeutet 16).

So bekomme ich falsche Reihenfolge.

Auch ich versuchte mit . Das gleiche Ergebnis kommt.

Und hier ist mein Code:

for (Type object: Objects) { 
     map.put(object.obj.getId() , object); 
    } 

Bitte helfen Sie mir, dies zu beheben.

Danke.

+5

In welcher Reihenfolge erwarten Sie? HashMap hat keine Bestellung? LinkedHashMap gibt Ihnen einen Anzeigenauftrag. Wenn Sie die bestellten Schlüssel benötigen, verwenden Sie TreeMap. – Eran

+0

@Eran Ich füge 6 Datensätze in eine Map ein. Die Einfügung beginnt mit dem 12. Index. (Ich sah es durch Debugging.) Aber ich möchte es von 1. –

+0

Sie kontrollieren den Index nicht (zumindest nicht direkt). Der Index wird basierend auf dem 'hashCode' bestimmt. Und Sie sollten sich sowieso nicht um den Index kümmern. – Eran

Antwort

1

LinkedHashMap ist genau das, was Sie suchen.

Es ist genau wie HashMap, außer dass wenn Sie darüber iterieren, es die Elemente in der Reihenfolge anzeigen.

1

Karten sind nicht für indexbasierten Zugriff gedacht. Es gibt nichts wie map.get(index). Alles, was möglich ist, um aufbewahrt, während in anderen Antworten/Kommentaren beschrieben Iterieren:

for (Type object: Objects) { 
    map.put(object.obj.getId() , object); 
} 
for (Entry entry: map.entrySet()) { 
    // should be same order as inserted if LinkedHashMap is used 
} 

Sie nicht über diesen internen Zustand der Karte kümmern sollen. Es zählt nur das beschriebene Verhalten des API.

+0

Aber hier Einfügen selbst ein Problem. Der letzte Datensatz wird am Anfang eingefügt. –

+0

@SivaPasupathi Nein, die internen Daten der LinkedHashMap speichern sie bei einem bestimmten Index im Hastable. Das heißt nicht, dass es sich so verhält. Stoppen Sie das Debuggen in Bibliotheken und beginnen Sie mit dem Lesen der API-Dokumentation. Wenn Sie mein Beispiel ausprobieren, funktioniert es genauso wie beschrieben. Das Element, das Sie beim 12. Index gespeichert sehen, wird bei der Iteration zuerst angezeigt. –

Verwandte Themen