如何做一个哈希图数组?

时间:2010-05-08 02:37:09

标签: java arrays hashmap

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

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

类型安全:HashMap []类型的表达式需要未经检查的转换以符合HashMap []

6 个答案:

答案 0 :(得分:55)

是什么给出的?有用。请忽略它:

@SuppressWarnings("unchecked")

不,你cannot对它进行参数化。不过,我宁愿使用List<Map<K, V>>

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

要了解有关馆藏和地图的更多信息,请查看this tutorial

答案 1 :(得分:12)

您可以使用以下内容:

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

}


}

答案 2 :(得分:7)

Java语言规范,第15.10节,声明:

  

创建数组创建表达式   一个对象是一个新的数组   元素属于指定的类型   PrimitiveType或   ClassOrInterfaceType。它是一个   如果是编译时错误   ClassOrInterfaceType不表示a   可再生型(§4.7)。

  

上述规则意味着要素   键入数组创建表达式   其他不能是参数化类型   而不是无限的通配符。

你可以做的最接近的是使用未经检查的强制转换,无论是原始类型,还是来自无限制的通配符:

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

你的版本显然更好: - )

答案 3 :(得分:4)

Java不希望你创建一个HashMaps数组,但是它可以让你创建一个Objects数组。所以,只需在HashMap周围编写一个类声明作为shell,然后创建该类的数组。如果您愿意,这可以存储一些关于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;

...

}

答案 4 :(得分:3)

您不能拥有泛型类型的数组。请改用List

答案 5 :(得分:0)

关于@alchemist 的回答,我仅使用 HashMap 和 ArrayList 添加了一些修改:

import java.util.ArrayList;
import java.util.HashMap;
public class ArrayOfHash {

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

    ArrayList<HashMap<String , String>> myArrayMap = new ArrayList<HashMap<String,String>>();

    myMap.put("Key1",   "Val0");
    myMap.put("Key2",   "Val1");
    myMap.put("Key3",   "Val2");
    myMap.put("Key4",   "Val3");

    myArrayMap.add(myMap);
    myArrayMap.add(myMap);

    for (int i = 0; i < myArrayMap.size(); i++) {
        System.out.println(myArrayMap.get(i).get("Key1") + ","
            + "" + myArrayMap.get(i).get("Key2") + ","
            + "" + myArrayMap.get(i).get("Key3") + ","
            + "" + myArrayMap.get(i).get("Key4"));
        
        System.out.println(); // used as new blank line
    }
}