web-dev-qa-db-ja.com

ハッシュマップの配列を行う方法は?

これは私がやろうとしたことですが、警告が表示されます:

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

型の安全性:型HashMap []の式は、HashMap []に準拠するために未チェックの変換が必要です。

46
Joren

何が得られますか?できます。無視してください:

@SuppressWarnings("unchecked")

いいえ、あなたは できません パラメータ化します。ただし、List<Map<K, V>>代わりに。

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

コレクションとマップの詳細については、 このチュートリアル をご覧ください。

55
BalusC

次のようなものを使用できます。

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

}


}
12
alchemist

Java Language Specification、セクション15.10には次のように記載されています。

配列作成式は、PrimitiveTypeまたはClassOrInterfaceTypeで指定されたタイプの要素を持つ新しい配列であるオブジェクトを作成します。 ClassOrInterfaceTypeが再定義可能な型を示さない場合、コンパイル時エラーです(§4.7)。

そして

上記の規則は、配列作成式の要素タイプを、無制限のワイルドカード以外のパラメーター化されたタイプにすることはできないことを意味します。

最も近い方法は、未チェックのキャストを使用することです。これは、未処理の型から、または既に行ったように無制限のワイルドカードからです。

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

あなたのバージョンは明らかに優れています:-)

7
meriton

Javaは、HashMapの配列を作成することを望みませんが、Objectの配列を作成できるようにします。そのため、HashMapを囲むシェルとしてクラス宣言を作成し、そのクラスの配列を作成します。これにより、必要に応じて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
Brian Peterson

ジェネリック型の配列を持つことはできません。代わりにListを使用してください。

3
Tom