有一个方法,我试图迭代HashMap的值,并检查它们是否匹配特定的字符串 - 如果他们这样做,那么我希望该方法返回false。我看了几个主题,这是我想出来的,虽然它似乎不起作用:
class Person {
public int check(String newName, String newNumber) {
for (Person recordObject : map.values()) {
if (map.get(recordObject) != null
&& map.get(recordObject).toString().equals(newNumber)) {
return 0;
}
}
map.put(newName, newNumber);
return 1;
}
}
目前我的程序总是为某个人创建一个记录,即使它们已经被添加到地图中,所以它实际上并没有进入检查方法。
答案 0 :(得分:4)
首先,检查地图中的值是否也是地图中的关键字...
for (Person object : map.values()) {
if (map.get(object) != null
&& map.get(object).getNumber().equals(newNumber)) {
return false;
}
}
我假设您的映射是(字符串)名称 - > (人)人,
map.put(name, record);
这是一个理想的映射吗?如果人们有相同的名字怎么办?
如果您想查看地图是否具有相同的密钥,则不能简单地使用该方法
boolean personExistsInMap = map.containsKey(String name)
?
修改
另一个可能的实现就是拥有一个Set<Person>
,并远离HashMap,因为它似乎有一个name
,因为密钥是没有意义的。然后,您可以在Person
中覆盖您的equals方法。
Set<Person> personSet = new HashSet<Person>();
if(personSet.contains(Person)) {
//Bla Bla
}
答案 1 :(得分:1)
您正在迭代map.values()
,但之后您正在使用这些值作为键;要么使用map.keySet()
迭代密钥并使用map.get(key)
,要么只使用map.values()
获得的值而不使用其他map.get(object)
。
答案 2 :(得分:0)
您想要的是HashMap<String,Person>
来存储您的人,还有HashSet<String>
来存储这些数字。对于每个新Person
,请使用add
的{{1}}方法添加数字,但请检查返回值。如果错误,则该号码已在HashSet
中,因此您不应将HashSet
添加到Person
。如果确实如此,请继续将HashMap
添加到Person
。它可能看起来像这样。
HashMap