Holen Sie sich den Schlüssel von HashMap in Android nach Position oder Index

Ich habe:

public static HashMap<String, String> CHILD_NAME_DOB = new HashMap<>(); 

Angenommen, die Werte in CHILD_NAME_DOB sind:

 <adam,15121990> <roy,01051995> <neha,05091992> <alisha,11051992> 

Ich versuche, das letzte Schlüsselelement aus CHILD_NAME_DOB zu holen. Das heißt, ich möchte Schlüssel alisha aus dem Beispiel oben zu temporäre String name zu holen.

Auch ich möchte wissen, wie man Daten nach Index abruft.

ZB: wenn int index = 2 , ich möchte Schlüssel "Neha" in String name

TIA

Bearbeiten: DateOfBirth-Wert ( CHILD_NAME_DOB in CHILD_NAME_DOB ) ist dynamisch und unbekannt. So DIESES LINK ist nicht das, was ich will.

  • Mit JSGF-Grammatik statt DMP-Sprachmodell (verwenden -jsgf statt -lm) in CMU Sphinx (Pocketsphinx)
  • Android-Verbindung zum Server mit selbstzertifiziertem Zertifikat
  • Android-YouTube-API spielen zwei oder mehr Youtube-Spieler in einer Hauptaktivität
  • Verwenden von putExtra, um Werte an den Intent-Service weiterzugeben
  • NameValuePair für openConnection veraltet
  • Kamera-API: Cross-Geräte-Probleme
  • Mit android.support.v4 Bibliothek in Intellij Idee
  • Font asset nicht gefunden helvetica.ttf auf lollipop
  • 8 Solutions collect form web for “Holen Sie sich den Schlüssel von HashMap in Android nach Position oder Index”

    Danke an @ Pentium10 für diese Antwort. Und ich habe es je nach meiner Notwendigkeit modifiziert.

     String key="default"; Iterator myVeryOwnIterator = CHILD_NAME_DOB.keySet().iterator(); while(myVeryOwnIterator.hasNext()) { key=(String)myVeryOwnIterator.next(); //String value=(String)meMap.get(key); } Toast.makeText(viewEnterChildExp.getContext(), "Key: "+key , Toast.LENGTH_LONG).show(); 

    Ich bekomme das letzte Schlüsselelement.

    Ich werde so schnell aktualisieren, dass ich auch einen einfachen Weg zum Key by Index finde.

    Das Abrufen des "letzten" Schlüssels und des Abrufs durch den Index wird von HashMap nicht unterstützt. Du kannst eine LinkedHashMap und das Element mit dem Index 2 (oder dem letzten Element) LinkedHashMap du es LinkedHashMap . Aber das wird eine O (n) Operation sein.

    Ich schlage vor, dass Sie eine List<Pair<String, String>> wenn die Reihenfolge der Schlüssel / Werte für Sie wichtig ist und Sie wollen indexbasierte Suche machen.

    Wenn sowohl Key-basierte und indexbasierte Lookup für Sie wichtig ist, können Sie eine kombinierte Datenstruktur verwenden, die sowohl aus einer List als auch aus einer HashMap , aber beachten Sie, dass das Entfernen von Elementen O(n) .

    Sie können eine Klasse Kind erstellen

     public class Child(){ private String name; private String number; .... } 

    Und dann dieses Objekt in eine Liste stellen

     public static List<Child> CHILD_NAME_DOB = new ArrayList<Child>(); // using LinkedList would defeat the purpose 

    Auf diese Weise kannst du die Methode get(int index) aufrufen, die das Element an der angegebenen Position in dieser Liste zurückgibt.

    In deinem Beispiel

     <adam,15121990> <roy,01051995> <neha,05091992> <alisha,11051992> 

    Aufruf CHILD_NAME_DOB.get(2) bekommst du <neha,05091992> (als Child-Objekt)

    HashMap hat kein Konzept der Bestellung, so dass der n-te Eintrag keinen Sinn macht. Sie TreeMap stattdessen eine TreeMap verwenden, die auf ihren Tasten bestellt wird.

    Allerdings sollten Sie Ihr Modell überdenken, wie Sie scheinen, widersprüchliche Interessen zu haben. Einerseits ist der Zugriff auf Index typisch für Lists , während der Zugriff auf den Schlüssel für Maps typisch ist. Ich bin mir nicht sicher, in welcher Situation Sie beide machen wollen.

    Wenn Sie wirklich sowohl Index als auch Schlüsselzugriff machen möchten, können Sie Ihre eigene Datenstruktur schreiben, die die Daten in einer Liste mit einer Zuordnung von Schlüssel zu Index und umgekehrt kombiniert. Ich würde dagegen empfehlen, aber wenn das wirklich was du willst, dann denke ich, das ist die beste Lösung.

    Ich weiß, es ist nicht die beste Lösung, aber was ist mit dieser Lösung (Pseudocode!). Kombiniere einfach Liste und Karte in einer Klasse.

     public class UserBirthday { private List<String> names = new ArrayList<>(); private Map<String, String> CHILD_NAME_DOB = new HashMap<String, String>(); public void add(String name, String bd) { if (!CHILD_NAME_DOB.containsKey(name)) { names.add(name); } CHILD_NAME_DOB.put(name, bd); } public String getByName(String name) { return CHILD_NAME_DOB.get(name); } public String getByIndex(int index) { return getByName(names.get(index)); // TODO: range test } public static void main(String[] args) { UserBirthday ub = new UserBirthday(); ub.add("dit", "12345678"); ub.add("lea", "234239423"); ub.add("alex", "43534534"); ub.add("ted", "099098790"); System.out.println(ub.getByIndex(2)); System.out.println(ub.getByName("alex")); } } 

    Sie können einige Probleme bekommen, wenn Sie einen Eintrag entfernen, aber es sollte nur ein Vorschlag sein.

      for (String key : hmList.keySet()) { String value = hmList.get(key); Log.e("HashMap values", "key=" + key + " ,value=" + value); } 

    Sie können auch eine ArrayMap anstelle einer HashMap verwenden. Um den Wert nach Index zu erhalten:

     ArrayMap.valueAt(index); 

    Um den Schlüssel bei einem Index zu erhalten:

     ArrayMap.keyAt(index); 

    Den Schlüssel nach Index von hashmap erhalten:

     key = (new ArrayList<>(CHILD_NAME_DOB.keySet())).get(index) 

    Erhalten den Wert nach Index:

     CHILD_NAME_DOB.get(key) 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.