如何做一个hashmaps数组?

这是我试图做的,但它给了我一个警告:

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

types安全性:typesHashMap []的expression式需要未经检查的转换以符合HashMap []

是什么赋予了? 有用。 只要忽略它:

 @SuppressWarnings("unchecked") 

不,你不能参数化。 我宁愿使用List<Map<K, V>>来代替。

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

要了解有关集合和地图的更多信息,请参阅本教程 。

你可以使用这样的东西:

 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); } } 

Java语言规范第15.10节指出:

数组创buildexpression式将创build一个对象,该对象是一个新数组,其元素的types由PrimitiveType或ClassOrInterfaceType指定。 如果ClassOrInterfaceType不表示可调整types(§4.7),则是编译时错误。

上面的规则意味着数组创buildexpression式中的元素types不能是参数化types,除了无限制的通配符以外。

最接近你可以做的是使用一个未经检查的强制转换,无论是从原始types,如你所做,或从一个无界的通配符:

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

你的版本显然更好:-)

Java不希望你创build一个HashMap的数组,但它可以让你创build一个对象数组。 所以,只要在你的HashMap上写一个类声明作为一个shell,并且创build一个这个类的数组。 这样,如果您愿意,可以存储一些有关HashMaps的额外数据 – 考虑到您已经有了一些复杂的数据结构,这可能是一个好处。

这看起来像什么:

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

 public class someClass { private static int dataFoo; private static int dataBar; private static HashMap<String, String> yourArray; ... } 

你不能有一个genericstypes的数组。 使用List来代替。