如何做一个哈希图数组?

Jor*_*ren 47 java arrays hashmap

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

HashMap<String, String>[] responseArray = new HashMap[games.size()];
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 56

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

@SuppressWarnings("unchecked")
Run Code Online (Sandbox Code Playgroud)

不,你不能参数化它.不过我宁愿用一个List<Map<K, V>>.

List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>();
Run Code Online (Sandbox Code Playgroud)

要了解有关集合和地图的更多信息,请查看本教程.

  • 谢谢。我使用地图列表来工作。我不喜欢忽略警告。以我的经验,如果您收到警告,那您就做错了。我唯一不了解的是为什么我将其声明为Map类型,但是当我实际实例化它时,我必须使用HashMap吗?Map &lt;String,String&gt; responseMap; responseMap =新的HashMap &lt;String,String&gt;(); (2认同)
  • Java gemeric和数组混合不良。例如,您不能使用`new`运算符创建具体参数化类型的数组。该问题与运行时系统无法保证类型安全有关。数组是协变的并且是精确化的。泛型是不变的,并且是非泛型的。最好的解决方案是在这种情况下使用列表。 (2认同)

alc*_*ist 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);

}


}
Run Code Online (Sandbox Code Playgroud)


mer*_*ike 7

Java语言规范第15.10节规定:

数组创建表达式创建一个对象,该对象是一个新数组,其元素的类型是PrimitiveType或ClassOrInterfaceType指定的类型.如果ClassOrInterfaceType不表示可重新类型(第4.7节),则为编译时错误.

上述规则意味着数组创建表达式中的元素类型不能是参数化类型,而不是无界通配符.

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

 HashMap<String, String>[] responseArray = (Map<String, String>[]) new HashMap<?,?>[games.size()];
Run Code Online (Sandbox Code Playgroud)

你的版本显然更好:-)