У меня есть этот класс:Как правильно настроить гарнитуру?
public class Person implements{
private String name;
private int height;
...
}
Люди уступающий по высоте. Кажется разумным ожидать ситуации, когда два разных человека могут иметь одинаковый рост. Вот почему я написал эту Comparator:
public static class Compar implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
int r = Integer.compare(o1.height, o2.height);
return r == 0 ? o1.name.compareTo(o2.name) : r;
}
}
И это моя главная:
public static void main(String[] args){
TreeSet<Person> ps = new TreeSet<>(new Compar());
ps.add(new Person("Ann", 150));
ps.add(new Person("Jane", 150));
ps.add(new Person("John", 180));
System.out.println(ps);
}
Я получил этот результат: Ann, высота = 150 Джейн, высота = 150 John, высота = 180. Но когда Я хочу использовать метод headSet
, я ожидаю следующий результат: Ann, height = 150 Jane, height = 150, ничего не отображается в tr2.
TreeSet<Person> tr2 = new TreeSet<Person>(new Compar());
Person p = new Person("",150);
tr2 = (TreeSet<Person>) ps.headSet(p,true);
Как это исправить?
Это похоже на вопрос типа «читать документы». Вы читали API TreeSet? Если да, то как насчет метода headSet вас сбивает с толку ? –
Я читал о TreeSet и методе headSet, я понимаю, что он возвращает значения, которые строго меньше, но есть метод public SortedSet headSet (E toElement, boolean включительно), который может возвращать не строгие значения. Я не понимаю, как переопределить компаратор, чтобы этот вариант headSet работал –
MyName
Вы не меняете Comparator - все в порядке. Но в будущем (или даже сейчас), пожалуйста, разместите хорошо отформатированный код. Пожалуйста, помните, что вы просите добровольцев о помощи, и все, что вы можете сделать, облегчит другим понимание вашего кода, очень ценится. –