如何检查两个或多个键是否映射到相同的值?

时间:2014-06-18 01:32:09

标签: java

这是我第一次在这里发帖,虽然我已经访问了很多次。如果这篇文章的格式不正确,我很抱歉。

我几乎通过编写一个接受字符串映射到字符串的方法,如果没有两个键映射到相同的值,或者如果映射为空,则返回true。

例如: 客户1 = 888-123-4567,客户2 = 888-234-5678,客户3 = 888-345-6789为TRUE。

客户1 = 888-888-8888,客户2 = 888 = 234 = 5678,客户3 = 888-888-8888为FALSE,因为客户1和客户3被映射到同一电话号码。

到目前为止,这是我的代码:

    public boolean isUnique ( Map<String, String> m ) {
        Map<String, Integer> m2 = new HashMap<String, Integer>();
        if ( !m.isEmpty() ) {
            for ( String key : m.values() ) {
                m2.put(key, 1);
                if ( m2.containsKey(key) )
                    m2.put(key, m2.get(key) + 1);
            }

            for ( Integer v : m2.values() ) {
                if( v > 1 )
                    return false;
            }
       }
       else
           return true;
    }

即使没有多次映射到某个值的键,我也会收到错误。有人可以解释我的情况或他们注意到的任何其他问题有什么问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

很好的格式化工作,感谢您将时间投入到帖子中。非常感谢。你的问题在于你在检查它是否包含

之前输入值(键)
for ( String key : m.values() ) {
    // you put your key in
    m2.put(key, 1);
    // check if it contains the key.... 
    // Of course it does because you just put it in there
    if ( m2.containsKey(key) ) {
        // increment it again
        m2.put(key, m2.get(key) + 1);
    }
}
// after this loop is complete every value in the m2 map is >= 2