HashMap позволяет дублировать? - программирование
Подтвердить что ты не робот

HashMap позволяет дублировать?

У меня есть сомнения относительно HashMap, так как мы все знаем, что HashMap допускает одну пару с нулевым ключом и значением. Мой вопрос здесь

Если бы я написал так,

m.put(null,null);
m.put(null,a);

Будет ли он вызывать (ошибку или исключение) или переопределит это значение или что будет значением returing?

4b9b3361

Ответ 1

Тип Hashmap Перезаписать этот ключ, если ключ hashmap - это тот же ключ

map.put("1","1111");
map.put("1","2222");

Выход

key:value
1:2222

Ответ 2

Каждый ключ HashMap должен быть уникальным.

Когда "добавление дублирующего ключа" старое значение (для того же ключа, что и ключи должны быть уникальными) просто заменяется; см. HashMap.put:

Связывает указанное значение с указанным ключом на этой карте. Если ранее карта содержала отображение для ключа, старое значение заменяется.

Возвращает предыдущее значение, связанное с ключом, или null, если не было сопоставления для ключа.

Что касается нулей: разрешен единственный нулевой ключ (поскольку ключи должны быть уникальными), но HashMap может иметь любое количество нулевых значений, а нулевой ключ не должен иметь нулевого значения. В документации :

[.. HashMap] разрешает нулевые значения и [a] нулевой ключ.

Однако в документации ничего не говорится о том, что null/null необходимо указать конкретную пару ключ/значение или null/ "a" недействительно.

Ответ 3

Не допускает дублирования в том смысле, что позволяет добавить вас, но он не заботится о том, что этот ключ уже имеет значение или нет. Итак, в настоящее время для одного ключа будет только одно значение

Он молча отменяет ключ 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

Ответ 5

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

Ответ 6

m.put(null,null); // here key=null, value=null
m.put(null,a);    // here also key=null, and value=a

Повторяющиеся ключи не разрешены в hashmap.
Однако значение может быть продублировано.