# V6033. An item with the same key has already been added.

Анализатор обнаружил подозрительную ситуацию, когда в словарь (контейнеры типа 'map' и т.п.) или в множество (контейнеры типа 'set' и т.п.) добавляются элементы с ключами, уже присутствующими в этих контейнерах. В результате добавление нового элемента будет проигнорировано. Это может свидетельствовать об опечатке и привести к неверному заполнению контейнера.

Рассмотрим пример со словарём:

    Map<String, Integer> map = new HashMap<String, Integer>() {{
      put("a", 10);
      put("b", 20);
      put("a", 30); // <=
    }};

В последней строке инициализации была допущена ошибка, так как ключ 'a' уже содержится в словаре. В результате данный словарь будет содержать 2 значения.

Исправить ошибку можно, использовав правильное значение ключа:

    Map<String, Integer> map = new HashMap<String, Integer>() {{
      put("a", 10);
      put("b", 20);
      put("c", 30);
    }};

Схожую ошибку можно допустить и при инициализации множества:

    HashSet<String> someSet = new HashSet<String>(){{
      add("First");
      add("Second");
      add("Third");
      add("First"); // <=
      add("Fifth");
    }};

Из-за ошибки вместо ключа 'Fourth' в множество 'someSet' пытаются записать строку 'First', но так как такой ключ уже содержится в множестве, он будет проигнорирован.

Для исправления ошибки необходимо исправить список инициализации:

    HashSet<String> someSet = new HashSet<String>(){{
      add("First");
      add("Second");
      add("Third");
      add("Fourth");
      add("Fifth");
    }};

Данная диагностика классифицируется как:

CWE-462

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6033.