我的程序非常简单。我所需要做的就是跟踪重复项并分别打印唯一元素和重复元素。我为此使用 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/