检查哈希映射中是否已存在值

时间:2014-03-10 10:25:15

标签: java map hashmap

有一个方法,我试图迭代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;
    }
}

目前我的程序总是为某个人创建一个记录,即使它们已经被添加到地图中,所以它实际上并没有进入检查方法。

3 个答案:

答案 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