Java静态hashMap返回重复项
我实际上不知道问题出在哪里,所以我根据自己的想法给它命名 自己的直觉。 这个简单的程序是为了演示静态变量和方法以及hashMap演示Java静态hashMap返回重复项,java,static,hashmap,iterator,Java,Static,Hashmap,Iterator,我实际上不知道问题出在哪里,所以我根据自己的想法给它命名 自己的直觉。 这个简单的程序是为了演示静态变量和方法以及hashMap演示 检索到的重复值是无法处理的,为什么HashMap中存在重复值? 在每次添加后,是否应该通过静态hashMap进行迭代来识别以前可能的重复项并从功能上删除它们? 然后我尝试调用removeDups方法手动删除它们,这次尝试也失败了 代码: 输出: 0 姓名:奥尔加 0 姓名:奥尔加 1. 姓名:玛丽亚 0 姓名:奥尔加 1. 姓名:玛丽亚 2. 姓名:塔蒂亚娜
检索到的重复值是无法处理的,为什么HashMap中存在重复值? 在每次添加后,是否应该通过静态hashMap进行迭代来识别以前可能的重复项并从功能上删除它们? 然后我尝试调用removeDups方法手动删除它们,这次尝试也失败了 代码: 输出:
0
姓名:奥尔加
0
姓名:奥尔加
1.
姓名:玛丽亚
0
姓名:奥尔加
1.
姓名:玛丽亚
2.
姓名:塔蒂亚娜
注册数量:3您的
removeDups
方法应该从HashMap
中删除重复的值。HashMap
可以包含重复的值。特定的HashMap
具有唯一的Integer
键和Registration
值,如果它们具有相同的名称,则可以认为是重复的
也就是说,removeDups()
写得不好。它将这些值与=
进行比较,而不是与的值进行比较,这意味着它永远不会删除任何内容。此外,如果希望类返回true
,则必须在Registration
类中重写equals
解决这些问题后,您可能会得到ConcurrentModificationException
,因为在迭代集合时,不应从集合中删除(除非您使用显式迭代器
并使用迭代器的删除()
方法)
编辑:
正如Guy所评论的,您的putUserInDB()
方法还调用printUsers()
,它将打印添加的所有用户。因此,某些用户将被多次打印。您没有重复的用户。当从构造函数调用printUsers()
时,您只是在一遍又一遍地打印它。Map有唯一的键,而在我看来,您想要唯一的值……不管怎样,您的键是什么?静电场?你考虑过同步吗?为什么你甚至需要一个映射而不是一个集合,计数应该是set.size()
。。。
public class Test {
public static void main(String[]args) {
Registration r = new Registration();
r.putUserInDB("Olga");
r.putUserInDB("Maria");
r.putUserInDB("Tatiana");
System.out.println("No of registrations: " + r.getRegistered());
System.out.println("__________________________________________");
r.putUserInDB("Anastasia");
r.putUserInDB("Aleksandra");
System.out.println("No of registrations: " + r.getRegistered());
System.out.println("__________________________________________");
r.putUserInDB("Nikolai");
r.putUserInDB("Aleksei");
System.out.println("No of registrations: " + r.getRegistered());
}
0