Como fazer um array de hashmaps?

Isso é o que eu tentei fazer, mas me dá um aviso:

HashMap[] responseArray = new HashMap[games.size()]; 

Digite safety: A expressão do tipo HashMap [] precisa de uma conversão desmarcada para se adequar ao HashMap []

O que da? Funciona. Ignore isso:

 @SuppressWarnings("unchecked") 

Não, você não pode parametrizá-lo. Eu prefiro usar um List> vez disso.

 List> listOfMaps = new ArrayList>(); 

Para saber mais sobre collections e mapas, dê uma olhada neste tutorial .

Você pode usar algo assim:

 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 myMap1 = new HashMap(); List> myMap = new ArrayList>(); 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 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); } } 

A especificação da linguagem Java, seção 15.10, afirma:

Uma expressão de criação de matriz cria um object que é uma nova matriz cujos elementos são do tipo especificado por PrimitiveType ou ClassOrInterfaceType. É um erro em tempo de compilation se o ClassOrInterfaceType não denotar um tipo reutilizável (§4.7).

e

As regras acima implicam que o tipo de elemento em uma expressão de criação de matriz não pode ser um tipo com parâmetros, diferente de um caractere curinga ilimitado.

O mais próximo que você pode fazer é usar uma conversão não verificada, seja do tipo bruto, como você fez, ou de um caractere curinga ilimitado:

  HashMap[] responseArray = (Map[]) new HashMap[games.size()]; 

Sua versão é claramente melhor 🙂

Java não quer que você crie uma matriz de HashMaps, mas permitirá criar uma matriz de objects. Então, apenas escreva uma declaração de class como um shell em torno do seu HashMap, e faça um array dessa class. Isso permite que você armazene alguns dados extras sobre o HashMaps, se quiser – o que pode ser um benefício, já que você já tem uma estrutura de dados um tanto complexa.

O que isso parece:

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

e

 public class someClass { private static int dataFoo; private static int dataBar; private static HashMap yourArray; ... } 

Você não pode ter uma matriz de um tipo genérico. Use List vez disso.