java - 如何使用 hashmap 跟踪和增加重复项计数

标签 java arraylist dictionary

我的程序非常简单。我所需要做的就是跟踪重复项并分别打印唯一元素和重复元素。我为此使用 HashMap 。 (dup是一个包含所有元素的数组列表)

    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 :swasti@gmail.com=0, Employee No :2 Employee Name :Shanthi Employee MailId :shanthi@gmail.com=0

有重复的记录会递增,o/p 为:

    Employee Name :Shreya Employee MailId :shreya@gmail.com=1, Employee Name :Sujatha Employee MailId :suravich@gmail.com=1

这里的问题是,对于具有更多重复项的记录,计数的增量不会超过 1。我不明白为什么。对此的任何形式的帮助将不胜感激。

P.S:我尝试使用数组列表和哈希集执行此操作,并确实得到了输出,但使用映射似乎是更好的方法。

最佳答案

这是因为这一行:

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

你每次都再次输入0(因为count在你的代码中始终是0)。在下一行,您的 newMap.get(element)因此将为 0...

您需要获取旧值并检查它是否不为空:

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

请注意您的dup应该是List<Employee> ,不是原始的List 。这将避免您当前必须进行的所有转换。

关于java - 如何使用 hashmap 跟踪和增加重复项计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471742/

相关文章:

python - 如何从嵌套字典中获取键?

java - 我可以同时使用 jdbcTemplet 和 hibernate

java - 如何在另一个函数中获取ArrayList值?

java - BODMAS系统的加法和减法

java - 如何在一个数组列表中对两个不同的模型进行排序?

python - 将多个字典元素追加到列表中

rest - 当集合服务返回字典而不是数组时如何使用 Restangular?

java - JTable - 触发列数据更改事件

java - android 电视盒 hdmi 3D 电视的真 3D 输出

Java打印问题