Frage Ist es möglich, ein Element von HashMap durch seine Position zu erhalten?


Wie kann man ein Element von HashMap anhand seiner Position abrufen, ist das überhaupt möglich?


75
2018-03-08 19:10


Ursprung


Antworten:


HashMaps Bestellung nicht aufbewahren:

Diese Klasse gibt keine Garantien   die Reihenfolge der Karte; bestimmtes,   es garantiert nicht, dass die Bestellung   wird im Laufe der Zeit konstant bleiben.

Sieh dir das an LinkedHashMap, die eine vorhersagbare Iterationsreihenfolge garantiert.


82
2018-03-08 19:15



Verwenden Sie eine LinkedHashMap und, wenn Sie nach Position abrufen müssen, konvertieren Sie die Werte in eine ArrayList.

LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);

88
2018-04-28 14:14



Wenn Sie die Reihenfolge beibehalten möchten, in der Sie die Elemente zur Karte hinzugefügt haben, verwenden Sie LinkedHashMap im Gegensatz zu nur HashMap.

Hier ist ein Ansatz, mit dem Sie einen Wert anhand seines Index in der Karte erhalten können:

public Object getElementByIndex(LinkedHashMap map,int index){
    return map.get( (map.keySet().toArray())[ index ] );
}

31
2017-10-27 17:55



Benutzen LinkedHashMap:

Implementierung der Hash-Tabelle und der verknüpften Liste der Map-Schnittstelle mit vorhersagbarer Iterationsreihenfolge. Diese Implementierung unterscheidet sich von HashMap insofern, als sie eine doppelt verknüpfte Liste enthält, die alle Einträge durchläuft.


11
2018-03-08 19:16



Wenn Sie aus irgendeinem Grund bei der hashMap bleiben müssen, können Sie das keySet in ein Array konvertieren und die Schlüssel im Array indizieren, um die Werte in der Map wie folgt zu erhalten:

Object[] keys = map.keySet().toArray();

Sie können dann wie folgt auf die Karte zugreifen:

map.get(keys[i]);

9
2018-06-15 10:27



Verwenden Sie LinkedHashMap und verwenden Sie diese Funktion.

private LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();

Definiere so und.

private Entry getEntry(int id){
        Iterator iterator = map.entrySet().iterator();
        int n = 0;
        while(iterator.hasNext()){
            Entry entry = (Entry) iterator.next();
            if(n == id){
                return entry;
            }
            n ++;
        }
        return null;
    }

Die Funktion kann den ausgewählten Eintrag zurückgeben.


6
2018-05-20 04:21



HashMap - und die zugrunde liegende Datenstruktur - Hashtabellen, haben keine Vorstellung von der Position. Im Gegensatz zu LinkedList oder Vector wird der Eingabeschlüssel in einen "Bucket" umgewandelt, in dem der Wert gespeichert wird. Diese Buckets sind nicht auf eine Weise sortiert, die außerhalb der HashMap-Schnittstelle sinnvoll ist. Daher sind die Elemente, die Sie in die HashMap einfügen, nicht in dem Sinne in Ordnung, wie Sie es von den anderen Datenstrukturen erwarten würden


2
2018-03-08 19:16