这是我第一次在这里发帖,虽然我已经访问了很多次。如果这篇文章的格式不正确,我很抱歉。
我几乎通过编写一个接受字符串映射到字符串的方法,如果没有两个键映射到相同的值,或者如果映射为空,则返回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;
}
即使没有多次映射到某个值的键,我也会收到错误。有人可以解释我的情况或他们注意到的任何其他问题有什么问题吗?谢谢!
答案 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