web-dev-qa-db-fra.com

La façon d'instancier la carte <String, List <String>> in Java

Je voudrais instancier Map<String, List<String>> en Java,

J'ai essayé

Map<String, List<String>> foo = new <String, List<String>>();

et

Map<String, List<String>> foo = new <String, ArrayList<String>>();

Aucun d'entre eux ne fonctionne. Est-ce que quelqu'un sait instancier cette carte en Java?

12
Alfred Zhong
new HashMap<String, List<String>>();

ou comme l'a commenté gparyani:

new HashMap<>(); // type inference

Remarque: chaque entrée doit recevoir une liste instanciée en tant que valeur. Vous ne pouvez pas obtenir ("myKey"). Add ("some_string_for_this_key"); la toute première fois que vous en obtenez () une liste.

Donc, récupérez une liste, vérifiez si elle est nulle.

S'il est nul, créez une nouvelle liste, ajoutez-y la chaîne, remettez la liste. Si c'est tout sauf nul, ajoutez-y ou faites ce que vous voulez.

23
Xabster

Vous avez oublié de mentionner la classe. Map voici le type de référence et est une interface . HashMap de l'autre côté de égal spécifie le type réel de l'objet créé et affecté à la référence foo.

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

Le type réel spécifié (HashMap ici) doit être assignable au type de référence (Map ici) c'est-à-dire si le type de référence est un Interface , le type d'objet doit l'implémenter . Et, si le type de la référence est une classe , le type de l'objet doit être le même classe ou son sous-type c'est-à-dire qu'il en sort.

A partir de Java 7 en avant, vous pouvez utiliser un raccourci comme

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

Votre deuxième méthode d'instanciation est non recommandée. Restez à utiliser List qui est une interface .

// Don't bind your Map to ArrayList
new TreeMap<String, ArrayList<String>>();

// Use List interface type instead
new TreeMap<String, List<String>>();
14
Ravi Thapliyal

La carte est une interface. Vous devez dire Java quelle classe de carte concrète vous voulez instancier.

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

ou

Map<String, List<String>> foo = new TreeMap<String, List<String>>();

etc.

5
Willis Blackburn