我写了一个方法来检查一个字符串是否只有唯一的字符。我发给它明显的非唯一字符串"11"
,它返回true
而不是false
。发生这种情况的原因是get(c)
中的if (tab.get(c) == null)
返回null
,即使字符'1'
已经在HashMap中。为什么HashMap的get()在它不应该返回时返回null?
我能做些什么来获得预期的行为?
/* Check if a string contains only unique characters */
public static boolean isUniqueChars(String s) {
HashMap<Boolean, Character> tab = new HashMap<Boolean, Character>();
Character c;
for (int i = 0; i < s.length(); ++i) {
c = new Character(s.charAt(i));
if (tab.get(c) == null)
tab.put(Boolean.TRUE, c);
else
return false;
}
return true;
}
public static void main(String[] args) {
String s = "11";
System.out.println(isUniqueChars(s)); /* prints true! why?! */
}
你真的使用布尔值作为键还是错字? – Surveon
不要使用'HashMap',你只需要一个'HashSet'。 – Marcelo
除了Jon和安业长说的话 - 使用'Set'代替'Map '可能会更好。 –