2009-10-05 3 views
1

je besoin d'une structure de données de type dictionnaire qui stocke des informations comme suit:Quelle est la meilleure infrastructure de données à utiliser en Java pour une liste "multidimensionnelle"?

key [value 1] [value 2] ... 

Je dois être en mesure de rechercher une valeur donnée en fournissant la clé et la valeur que je désire (le nombre de valeurs est constante). Une table de hachage est la première chose qui m'est venue à l'esprit mais je ne pense pas qu'elle puisse être utilisée pour plusieurs valeurs. Est-il possible de le faire avec une seule interface de données plutôt que de diviser chaque paire clé-valeur en une liste séparée (ou une table de hachage)? Aussi, je préfère ne pas utiliser un tableau multidimensionnel car le nombre d'entrées n'est pas connu à l'avance. Merci

Répondre

1

Je ne suis pas sûr de savoir ce que vous voulez dire par rapport à votre liste de valeurs et de rechercher une valeur donnée. Est-ce fondamentalement une liste de paires nom-valeur? Ou voulez-vous spécifier les valeurs par index?

Dans ce dernier cas, vous pouvez utiliser un HashMap qui contient ArrayLists - Je suppose que ces valeurs sont String, et si la clé était aussi une chaîne, il ressemblerait à quelque chose comme ceci:


    HashMap<String, ArrayList<String>> hkansDictionary = new HashMap<String, ArrayList<String>>(); 

    public String getValue (String key, int valueIdx) { 
     ArrayList<String> valueSet = hkansDictionary.get(key); 
     return valueSet.get(valueIdx); 
    } 

Si le premier, vous pouvez utiliser un HashMap qui contient HashMaps. Cela ressemble davantage à ceci:


    HashMap<String, HashMap<String, String>> hkansDictionary 
       = new HashMap<String, HashMap<String, String>>(); 
    ---- 
    public String getValue (String key, String name) { 
     HashMap<String, String> valueSet = hkansDictionary.get(key); 
      return valueSet.get(name); 
    } 
+0

Thanks..the HashMap de HashMaps est exactement ce que je cherchais. – hkan1

0

Vous pouvez créer une classe contenant les deux valeurs clés que vous souhaitez rechercher, implémenter equals() et hashcode() pour vérifier/combiner les appels aux valeurs sous-jacentes et utiliser cette nouvelle classe comme clé de votre Carte.

0

J'utiliseraient

Map<Key,ArrayList<String>> map = new HashMap<Key,ArrayList<String>> 

où vous définissez la clé comme

public class Key{ 
    private String key; 
    private String value; 
    //getters,setters,constructor 

    //implement equals and hashcode and tostring 
} 

alors vous pouvez le faire

Key myKey = new Key("value","key"); 
map.get(myKey); 

qui renverrait une liste de N éléments

0

Vous pouvez créer un tableau multidimensionnel en le déclarant d'abord, puis en créant une méthode pour vous assurer que les nouvelles clés de valeur sont initialisées avant la mise. Cet exemple utilise une carte avec une liste incorporée, mais vous pouvez avoir des cartes de cartes, ou tout ce que votre cœur désire.

à savoir, vous devez définir votre propre mettre la méthode qui gère la nouvelle valeur initialisation comme ceci:

private static Map<String, List<USHCommandMap>> uSHCommandMaps = new HashMap<String, List<USHCommandMap>>(); 

public void putMemory() { 

     if (!uSHCommandMaps.containsKey(getuAtom().getUAtomTypeName())) 
      uSHCommandMaps.put(getuAtom().getUAtomTypeName(), new ArrayList<USHCommandMap>()); 

     uSHCommandMaps.get(getuAtom().getUAtomTypeName()).add(this); 

    }