Подтвердить что ты не робот

Как сделать массив hashmaps?

Это то, что я пытался сделать, но это дает мне предупреждение:

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

Тип безопасности: выражение типа HashMap [] требует необработанного преобразования для соответствия HashMap []

4b9b3361

Ответ 1

Что дает? Оно работает. Просто игнорируйте это:

@SuppressWarnings("unchecked")

Нет, вы cannot параметризуете его. Однако я бы скорее использовал List<Map<K, V>>.

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

Чтобы узнать больше о коллекциях и картах, просмотрите этот учебник.

Ответ 2

Вы можете использовать что-то вроде этого:

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

}


}

Ответ 3

Спецификация языка Java, раздел 15.10, гласит:

Выражение создания массива создает объект, который является новым массивом, элементы имеют тип, указанный PrimitiveType или ClassOrInterfaceType. Это ошибка времени компиляции, если ClassOrInterfaceType не обозначает (§4.7).

и

Из приведенных выше правил следует, что элемент введите в выражении создания массива не может быть параметризованным типом, другой чем неограниченный шаблон.

Самое близкое, что вы можете сделать, это использовать неконтролируемый листинг, либо из необработанного типа, как вы это делали, либо из неограниченного шаблона:

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

Ваша версия явно лучше: -)

Ответ 4

Java не хочет, чтобы вы создавали массив HashMaps, но он позволит вам создать массив объектов. Итак, просто напишите объявление класса как оболочку вокруг вашего 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;

...

}

Ответ 5

У вас не может быть массив общего типа. Вместо этого используйте List.