繁体   English   中英

如何做一个哈希图数组?

[英]How to do an array of hashmaps?

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

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

类型安全:HashMap[] 类型的表达式需要未经检查的转换以符合 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 节指出:

数组创建表达式创建一个对象,该对象是一个新数组,其元素属于 PrimitiveType 或 ClassOrInterfaceType 指定的类型。 如果 ClassOrInterfaceType 不表示可具体化的类型(第 4.7 节),则会出现编译时错误。

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

您可以做的最接近的是使用未经检查的强制转换,无论是从原始类型(如您所做的那样)还是从无界通配符:

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

你的版本显然更好:-)

Java 不希望您创建一个 HashMap 数组,但它可以让您创建一个对象数组。 因此,只需编写一个类声明作为 HashMap 的外壳,并创建该类的数组。 如果您愿意,这可以让您存储一些关于 HashMap 的额外数据——这可能是一个好处,因为您已经有了一个有点复杂的数据结构。

这看起来像什么:

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

public class someClass {

private static int dataFoo;
private static int dataBar;
private static HashMap<String, String> yourArray;

...

}

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

关于@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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM