Ответ 1
Тип Hashmap Перезаписать этот ключ, если ключ hashmap - это тот же ключ
map.put("1","1111");
map.put("1","2222");
Выход
key:value
1:2222
У меня есть сомнения относительно HashMap, так как мы все знаем, что HashMap допускает одну пару с нулевым ключом и значением. Мой вопрос здесь
Если бы я написал так,
m.put(null,null);
m.put(null,a);
Будет ли он вызывать (ошибку или исключение) или переопределит это значение или что будет значением returing?
Тип Hashmap Перезаписать этот ключ, если ключ hashmap - это тот же ключ
map.put("1","1111");
map.put("1","2222");
Выход
key:value
1:2222
Каждый ключ HashMap должен быть уникальным.
Когда "добавление дублирующего ключа" старое значение (для того же ключа, что и ключи должны быть уникальными) просто заменяется; см. HashMap.put:
Связывает указанное значение с указанным ключом на этой карте. Если ранее карта содержала отображение для ключа, старое значение заменяется.
Возвращает предыдущее значение, связанное с ключом, или null, если не было сопоставления для ключа.
Что касается нулей: разрешен единственный нулевой ключ (поскольку ключи должны быть уникальными), но HashMap может иметь любое количество нулевых значений, а нулевой ключ не должен иметь нулевого значения. В документации :
[.. HashMap] разрешает нулевые значения и [a] нулевой ключ.
Однако в документации ничего не говорится о том, что null/null необходимо указать конкретную пару ключ/значение или null/ "a" недействительно.
Не допускает дублирования в том смысле, что позволяет добавить вас, но он не заботится о том, что этот ключ уже имеет значение или нет. Итак, в настоящее время для одного ключа будет только одно значение
Он молча отменяет ключ value
для null
. Не исключение.
При попытке получить последнее вставленное значение с null
будет возвращено.
Это не только с null
и для любого ключа.
Проведите быстрый пример
Map m = new HashMap<String, String>();
m.put("1", "a");
m.put("1", "b"); //no exception
System.out.println(m.get("1")); //b
Пример кода:
HashMap<Integer,String> h = new HashMap<Integer,String> ();
h.put(null,null);
h.put(null, "a");
System.out.println(h);
Вывод:
{null=a}
HashMap не позволяет дублировать ключи, но поскольку он не является потокобезопасным, он может иметь повторяющиеся ключи. например:
while (true) {
final HashMap<Object, Object> map = new HashMap<Object, Object>(2);
map.put("runTimeType", 1);
map.put("title", 2);
map.put("params", 3);
final AtomicInteger invokeCounter = new AtomicInteger();
for (int i = 0; i < 100; i++) {
new Thread(new Runnable() {
@Override
public void run() {
map.put("formType", invokeCounter.incrementAndGet());
}
}).start();
}
while (invokeCounter.intValue() != 100) {
Thread.sleep(10);
}
if (map.size() > 4) {
// this means you insert two or more formType key to the map
System.out.println( JSONObject.fromObject(map));
}
}
m.put(null,null); // here key=null, value=null
m.put(null,a); // here also key=null, and value=a
Повторяющиеся ключи не разрешены в hashmap.
Однако значение может быть продублировано.