Как отслеживать и увеличивать количество дубликатов, используя hashmap

1

Моя программа очень простая. Все, что мне нужно сделать, это отслеживать дубликаты и печатать уникальные и повторяющиеся элементы отдельно. Я использую hashmap для этого. (dup - это arraylist, содержащий все элементы)

    Map<Employee, Integer> newMap = new HashMap();
    int count = 0;
    for (Employee element : dup) {

        System.out.println("oooo" + element);
        if (newMap.put((Employee) element, count) != null) {
            newMap.put((Employee) element, newMap.get(element) + 1);
        }
    }
    System.out.println("oooo" + newMap);

Созданный o/p:

    Employee No :9 Employee Name :Swasti Employee MailId :[email protected]=0, Employee No :2 Employee Name :Shanthi Employee MailId :[email protected]=0

Записи с дубликатами увеличиваются, а o/p:

    Employee Name :Shreya Employee MailId :[email protected]=1, Employee Name :Sujatha Employee MailId :[email protected]=1

Проблема здесь в том, что счетчик не увеличивается больше, чем один для записей с большим количеством дубликатов. Я не понимаю, почему. Любая помощь по этому вопросу будет оценена по достоинству.

PS: Я пытался сделать это с помощью arraylist и hashset и получил результат, но использование карты казалось лучшим способом.

Теги:
arraylist
map

3 ответа

1

Это связано с тем, что эта строка:

if (newMap.put((Employee) element, count) != null) {

вы поставите 0 каждый раз (так как count в коде всегда 0). И на следующей строке ваш newMap.get(element) будет поэтому 0...

Вам нужно взять старое значение и проверить, что оно не равно null:

Integer oldValue = newMap.put((Employee) element, 0);
if (oldValue != null)
    newMap.put((Employee) element, oldValue + 1);

Обратите внимание, что ваш dup должен быть List<Employee>, а не сырым List. Это позволит избежать всех бросков, которые вы должны сделать в настоящее время.

  • 0
    Счет также должен начинаться с 1. :)
  • 0
    @Radiodef Хм, неясно по вопросу ОП, но я думаю, что вы правы
Показать ещё 3 комментария
0
if (newMap.get(element) != null) {
    newMap.put(element, newMap.get(element) + 1);
} else {
    newMap.put(element, 1);
}
  • 0
    Я думаю, что ответ вполне достаточно. Я дал автору решения и хотел продолжить, подумал он сам.
0
        if (newMap.containsKey(element)) {
            newMap.put(element, newMap.get(element) + 1);
        }

Кроме того, поскольку вы используете дженерики, вам нужно привести тип.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню