web-dev-qa-db-fra.com

Comment retourner une liste de clés depuis une carte de hachage?

J'essaie actuellement de créer un programme qui conjugue les verbes en espagnol. J'ai créé une table de hachage contenant une clé et une instanciation de l'objet Verb. La clé est une chaîne qui a la forme infinitive du verbe (par exemple, "hablar"). C'est le code que j'ai jusqu'à présent pour la carte de hachage:

public class VerbHashMap {

    HashMap<String, Verb> verbHashMap;

    public VerbHashMap(){
        verbHashMap = new HashMap();
    }   
}

La clé de chaque verbe dans HashMap est basée sur la forme infinitive du verbe. Par exemple, la chaîne "hablar" est la clé d'un verbe espagnol. La classe Verb a une méthode appelée getInfinitive () qui retourne une chaîne contenant la forme infinitive du verbe.

public boolean addVerb(Verb verb){
    if(verbHashMap.containsValue(verb.getInfinitive()){
        return false;
    }
    else{
        verbHashMap.put(verb.getInfinitive(), verb);
        return true;
    }
}

La question est de savoir quel est le moyen le plus efficace de créer une méthode qui renvoie une liste de tous les verbes de la carte de hachage par ordre alphabétique. Devrais-je demander à la méthode de renvoyer une ArrayList contenant les clés de tous les objets de la carte de hachage? Ou y a-t-il un moyen beaucoup plus efficace de s'y prendre?

53
idungotnosn

Utilisez la méthode keySet() pour renvoyer un ensemble avec toutes les clés d’un Map.

Si vous souhaitez conserver votre carte ordonnée, vous pouvez utiliser un TreeMap .

90
Marcelo

En utilisant map.keySet(), vous pouvez obtenir un jeu de clés. Puis convertissez ce jeu en List en:

List<String> l = new ArrayList<String>(map.keySet());

Et ensuite, utilisez la méthode l.get(int) pour accéder aux touches.

PS: - source- manière la plus concise de convertir un ensemble <String> en une liste <String>

61
Anu
map.keySet()

vous rendra toutes les clés. Si vous souhaitez que les clés soient triées, vous pouvez envisager une TreeMap

7
Kal
 for(int i=0;i<ytFiles.size();i++){

                    int key = ytFiles.keyAt(i);
                    Log.e("key", String.valueOf(key));
                    String format = ytFiles.get(key).getFormat().toString();
                    String url = ytFiles.get(key).getUrl();
                    Log.e("url",url);
                }

vous pouvez obtenir clé par méthode keyat et vous devez passer l'index, il retournera alors la clé à cet index particulier. cette boucle aura toute la clé

0
Zeeshan Mehdi