К сожалению, интерфейс Java Map не допускает дублирование ключей:
Объект, который сопоставляет ключи со значениями.
карта не может содержать дубликаты ключей;
каждая клавиша может отображать не более одного значения.
Таким образом, когда вы пытаетесь поместить ключ, который уже существует на карте, новое значение заменяет старое значение; причина, по которой ваш итератор повторяется 2 раза, состоит в том, что есть только 2 элемента.
Если вы хотите сохранить дублирующиеся ключи (например, «a», указывающие на 1 и 2), вы можете иметь карту списка или набор, например,
Map<String, List<Integer>> myMap;
Где список или набор, который соответствует ключу, содержит все значения, например myMap.get("a")
, возвращает список, который будет выглядеть как [1,2]
.
Или используйте что-то вроде MultiMap из Google или Apache
Для вашей проблемы, я полагаю, вы говорите, что вам нужна специальная карта, где:
- Значение для каждой клавиши - сколько раз она была введена.
- Когда вы перебираете карту, вы перебираете все добавленные ключи, каждый раз, когда они добавляются.
Возможно, вы захотите взглянуть на то, как они реализовали iterator()
для HashMap , особенно на внутреннем закрытом классе HashIterator
.
next()
и hasNext()
могут, возможно, продолжать возвращать ключ столько раз, сколько указано значением (т. Е. Если "Hello"
отображается на 2
, ваш пользовательский итератор () вернется с next()
"Hello "два раза, прежде чем перейти к следующему ключу).
Карта может не подходить для того, что вы пытаетесь сделать, но я желаю вам удачи!