2014-06-05 1 views
2

J'essaie de créer une classe PhoneBook qui utilise un HashMap en Java. Lorsque j'ajoute une entrée à l'aide de la méthode put() dans addContact(), cela fonctionne correctement, mais lorsque j'essaie d'extraire des valeurs dans la méthode searchContact(), aucun n'est renvoyé. Je ne reçois pas de valeurs nulles; HashMap contient définitivement la ou les clés que je recherche, mais les valeurs associées à la ou aux clés ne sont pas retournées. Merci d'avance.Java HashMap, get méthode (clé) ne fonctionne pas

Voici mon code:

public class PhoneBookContactsImpl { 

    private Map<String, List<String>> contactMap = new HashMap<String, List<String>>(); 

    public void addContact(String name, List<String> list) {   
     contactMap.put(name, list); 
       //its working fine here 
     System.out.println(contactMap.get(name)); 
    } 

    public Map<String, List<String>> getContactMap() { 

     Set set = contactMap.entrySet(); 
     Iterator i = contactMap.entrySet().iterator(); 
     while (i.hasNext()) { 
      Map.Entry me = (Map.Entry) i.next(); 
      System.out.println(me.getKey() + " : "); 
      List<String> nos = (List<String>) me.getValue(); 
      System.out.println("Nos = " + nos + " n "); 
      System.out.println(nos.size()); 
     } 
     return contactMap; 
    } 

    public List<String> searchContact(String name) throws NoDataFoundException { 

     if (contactMap.isEmpty()) { 
      System.out.println("Empty PhoneBook"); 
      throw new NoDataFoundException(); 
     } else { 
      if (contactMap.containsValue(name)) 
       return contactMap.get(name);    
           //it doesnt retrieve valur from here 
      else { 
       System.out.println("No Entry for Specified Entry"); 
       throw new NoDataFoundException(); 
      } 
     } 
    } 
} 
+0

Merci Every1, pour moi aider, i avait deux problèmes un, j'ai utilisé containsValue() insteas de containsKey() un autre problème la variable de liste dans ma classe principale, que je passais en paramètre, après avoir passé j'appelait la méthode Clear(), de sorte que vidé les autres liens référencés dans PhoneBookContactsImpl .. Merci à tous 1 – user3712362

Répondre

3

votre instruction if vérifie si le répertoire a name comme valeur, de sorte que votre get est jamais atteint.

Essayez ceci:

if (contactMap.containsKey(name)) 
      return contactMap.get(name);  
+0

Merci, c'était une de mes erreurs :) – user3712362

1

Comme autre réponse indique que vous devriez vérifier containsKey parce name est une clé, pas une valeur. Mais pourquoi ne pas faire la chose beaucoup plus facile:

public List<String> searchContact(String name) throws NoDataFoundException { 
    List<String> result = contactMap.get(name); 
    if (result == null) { 
     // empty map, or no matching value or value is null 
     throw new NoDataFoundException(); 
    } 
} 
+0

Yeaa avec votre suggestion La méthode sera plus facile, mais je dois réaliser deux cas différents, un pour aucune entrée pour le nom spécifié, un autre pour Blank ContactBook . merci – user3712362

0

Vous faites:

if (contactMap.containsValue(name)) 
    return contactMap.get(name); 

et que vous devez faire:

if (contactMap.containsKey(name)) 
    return contactMap.get(name); 
+0

Merci, ça a aidé – user3712362