web-dev-qa-db-fra.com

Comment faire un tableau de hashmaps?

C'est ce que j'ai essayé de faire, mais cela me donne un avertissement:

HashMap<String, String>[] responseArray = new HashMap[games.size()];

Sécurité des types: l'expression du type HashMap [] nécessite une conversion non contrôlée pour se conformer à HashMap []

46
Joren

Ce qui donne? Ça marche. N'y faites pas attention:

@SuppressWarnings("unchecked")

Non, vous ne pouvez pas le paramétrer. Je préfère cependant utiliser un List<Map<K, V>> au lieu.

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

Pour en savoir plus sur les collections et les cartes, consultez ce tutoriel .

55
BalusC

Vous pouvez utiliser quelque chose comme ceci:

import Java.util.ArrayList;
import Java.util.HashMap;
import Java.util.List;
import Java.util.Map;


public class testHashes {

public static void main(String args[]){
    Map<String,String> myMap1 = new HashMap<String, String>();

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

    myMap1.put("URL", "Val0");
    myMap1.put("CRC", "Vla1");
    myMap1.put("SIZE", "Val2");
    myMap1.put("PROGRESS", "Val3");

    myMap.add(0,myMap1);
    myMap.add(1,myMap1);

    for (Map<String, String> map : myMap) {
        System.out.println(map.get("URL"));
                    System.out.println(map.get("CRC"));
                    System.out.println(map.get("SIZE"));
                    System.out.println(map.get("PROGRESS"));
    }

    //System.out.println(myMap);

}


}
12
alchemist

La spécification du langage Java, section 15.10, indique:

Une expression de création de tableau crée un objet qui est un nouveau tableau dont les éléments sont du type spécifié par PrimitiveType ou ClassOrInterfaceType. Il s'agit d'une erreur au moment de la compilation si ClassOrInterfaceType ne désigne pas un type réifiable (§4.7).

et

Les règles ci-dessus impliquent que le type d'élément dans une expression de création de tableau ne peut pas être un type paramétré, autre qu'un caractère générique illimité.

Le plus proche que vous pouvez faire est d'utiliser un cast non contrôlé, soit à partir du type brut, comme vous l'avez fait, soit à partir d'un caractère générique illimité:

 HashMap<String, String>[] responseArray = (Map<String, String>[]) new HashMap<?,?>[games.size()];

Votre version est clairement meilleure :-)

7
meriton

Java ne veut pas que vous créiez un tableau de HashMaps, mais il vous permettra de créer un tableau d'objets. Donc, écrivez simplement une déclaration de classe en tant que Shell autour de votre HashMap et créez un tableau de cette classe. Cela vous permet de stocker des données supplémentaires sur les HashMaps si vous le souhaitez - ce qui peut être un avantage, étant donné que vous avez déjà une structure de données quelque peu complexe.

À quoi cela ressemble:

private static someClass[] arr = new someClass[someNum];

et

public class someClass {

private static int dataFoo;
private static int dataBar;
private static HashMap<String, String> yourArray;

...

}
4
Brian Peterson

Vous ne pouvez pas avoir un tableau d'un type générique. Utilisez List à la place.

3
Tom