如何做一个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
来代替。