Различные способы создания HashMaps
Я недавно узнал о HashMaps, но у меня есть один вопрос, на который я, похоже, не могу получить четкий ответ. Основное различие между -
HashMap hash1 = new HashMap();
vs
HashMap<,>hash1 = new HashMap <,> (); //Filled in with whatever Key and Value you want.
Я подумал, что, когда вы определяете HashMap, он требует ключа и значения. Любая помощь приветствуется. Спасибо.
Ответы
Ответ 1
Вот те варианты, которые у вас есть:
J2SE < 5.0 style:
Map map = new HashMap();
Стиль J2SE 5.0+ (использование generics):
Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>();
Стиль Гуавы (более короткий и гибкий):
Map<KeyType, ValueType> map = Maps.newHashMap();
Ответ 2
Вы должны взглянуть на Java generics, если вы не укажете типы HashMap, оба ключа и значения будут Object
.
Итак, если вы хотите использовать HashMap с Integer
и String
значениями:
HashMap<Integer, String> hashMap= new HashMap<Integer, String>();
Ответ 3
Указание типов key
и value
позволяет повысить безопасность типов за счет включения принудительного ввода текста во время компиляции.
Это упрощает запись кода, который случайно не смешивает типы ключей и значений и уменьшает количество бросков, которые вы должны явно объявить в коде.
Однако важно помнить, что эти проверки типов являются только временем компиляции, то есть, как только приложение будет запущено, JVM позволит вам использовать любые типы для ключей и значений.
Ответ 4
- Generics
может подразумеваться для классов, интерфейсов, методов, переменных и т.д., но самая важная причина, для которой используется Collection
более безопасный тип.
- Generics
убедитесь, что входит только определенный тип объекта и выходит из Collections
.
- Кроме того, стоит отметить, что существует процесс, известный как Erasure
,
- > Erasure
- это процесс, в котором type parameters
и type arguments
удаляются из общих классов и интерфейсов компилятором, что делает его совместимым с обратной связью с кодами, где написано без Generics.
Итак,
HashMap<String, Integer> map = new HashMap<String, Integer>();
принимает значение Raw type
,
HashMap map = new HashMap();