簡體   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