Suche Dictionary/Map die per Index UND Key ansprechbar ist

  • Hallo,


    ich habe bislang "nur" mit iOS und Windows Phone gearbeitet und versuche mich nun an meinem ersten Android Projekt. Ich suche eine Collection bei der die Elemente über einen Index (List) und einen Key (Map) angesprochen werden können. Bislang bin auf LinkedHashMap gestoßen, also eine Map bei der die Elemente durchaus geordnet sind, allerdings erlaubt LinkedHashMap dennoch keinen Zugriff per Index (warum eigentlich).


    Über einige Umwege ist der Zugriff per Index natürlich möglich, aber sicherlich nicht besonders effizient:

    Code
    ArrayList<String>(linkedHashMap.values())).get(index)


    Eine eigene Klasse zu erstellen, die die Elemente intern in einer Map und einer List speichert ist natürlich ebenfalls möglich. Aber gibt es keine fertige Lösung von Java hierfür?

  • Normalerweise gibt es für ein und dasselbe Vorgehen in jeder Programmiersprache ein Äquivalent.


    Mir ist unter iOS absolut kein Mechanismus bekannt, mit dem ich ein Objekt per Index und Key ansprechen kann.
    In C# auch nicht, aber da stecke ich auch nicht so tief drin.


    Eigentlich kenne ich diese 'Unart' nur von PHP.


    Wenn es das in C# gibt, dann wirst Du unter demselben Stichwort sicherlich auch in Java fündig. Ist ja alles ziemlich ähnlich.
    Wenn es das in iOS gibt, dann sag mir das Stichwort und ich finde gern das Äquivalent dazu heraus.


    Ich befürchte aber, es wird auf eine Eigenimplementierung herauslaufen.
    Wobei diese zu erstellen für iOS vermutlich leichter wäre, so aus Speicherplatzgründen. Denn entweder die List oder die Map müsste lediglich eine weak reference auf das Objekt verwalten und zurückgeben, und wie sich so etwas in Garbage Collected Sprachen umsetzen lässt weiß ich nicht so genau.
    (Vermutlich mit einer Instanz, die WeakReference implementiert…)


    Tatsächlich finde ich Deine erste Idee sehr gut. Via linkedHashMap.values() bekommst Du das (entsprechend sortierte) Array und mit einem get(index) das darin enthaltene Objekt.
    Vielleicht reicht eine Subklasse von LinkedHashMap, in der Du ein get(int index) implementierst, und genau das machst.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!