Я создал очень простой пользовательский Comparator, который я использую с TreeSet для сортировки строк по длине в этом TreeSet.
У меня проблемы с поиском причины, по которой (s1.equals(s2))
возвращает false, даже если две строки s1 и s2 содержат одно и то же значение.
Eclipse «представление переменных» показывает, что буквы одинаковы в обеих строках, но «id» отличается, я думаю, поэтому equals возвращает False.
Кстати, что это за id=" "
? Это какой-то указатель на данные объекта String?
public class MyComparator implements Comparator<String> {
public int compare(String s1, String s2) {
if(s1.length()<s2.length()) return -1;
else if (s1.length()>s2.length()) return 1;
return 0;
else if (s1.equals(s2)) return 0; //?? ALWAYS RETURNS FALSE
else if (s1.toString().equals(s2.toString()))//SAME PROBLEM HERE (test)
else return -1;
}
public boolean equals(String s) {
if (this.equals(s)) return true;
else return false;
}
}
Теперь вот где я использую этот пользовательский компаратор:
combinations = new TreeSet<String>(new MyComparator());
Я заполняю комбинации несколькими строками, построенными по методу substring()
.
Из-за ранее упомянутой проблемы комбинации содержат дубликаты.
Когда я установил НЕТ собственного компаратора для этого TreeSet, дубликатов больше нет (это то, что я хочу), но они отсортированы по алфавиту, что является нормальным, но не моей целью.