我的程序非常简单。我需要做的就是跟踪重复项并分别打印唯一和重复元素。我正在使用哈希映射。 (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 :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
这里的问题是,对于具有更多重复项的记录,计数不会增加多于一个。我不明白为什么。任何形式的帮助将不胜感激。
P.S:我尝试用arraylist和hashset做这个,但确实得到了输出但是使用地图似乎是一种更好的方法。
答案 0 :(得分:1)
这是因为这一行:
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
。这样可以避免你当前要进行的所有演员表。
答案 1 :(得分:0)
if (newMap.containsKey(element)) {
newMap.put(element, newMap.get(element) + 1);
}
此外,由于您使用泛型,您需要进行类型转换。
答案 2 :(得分:0)
if (newMap.get(element) != null) {
newMap.put(element, newMap.get(element) + 1);
} else {
newMap.put(element, 1);
}