Я написал метод проверки, содержит ли строка только уникальные символы. Я посылаю ему очевидную строку не-уникальных символов "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?! */
}
Вы действительно используете Boolean для ключа или это опечатка? – Surveon
Не используйте «HashMap», все, что вам нужно, это «HashSet». – Marcelo
В дополнение к тому, что сказал Джон и Свервей, было бы лучше использовать 'Set' вместо 'Map '. –