Java 如何让耳机正常工作?

Java 如何让耳机正常工作?,java,comparator,treeset,Java,Comparator,Treeset,我有这门课: public class Person implements{ private String name; private int height; ... } 人是按身高来比较的。两个不同的人可以拥有相同的身高,这似乎是合理的。这就是为什么我写了这个比较器: public static class Compar implements Comparator<Person> { @Override public int compare(Person o1,

我有这门课:

public class Person implements{
private String name;
private int height;
...
} 
人是按身高来比较的。两个不同的人可以拥有相同的身高,这似乎是合理的。这就是为什么我写了这个比较器:

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;
    }
}

如何解决此问题?

是的,
tr2
中不会显示任何内容,因为
.headSet()
返回此集合中元素严格小于
p
(独占)部分的视图

您的所有其他
个人
对象都等于/高于
p
(150150180)。如果它们相等,则通过比较器通过其
名称
字段对它们进行比较(因为您将
作为第二个参数传递给
.headSet()
。因为
p
名称
是一个空字符串,它比其他名称小,因此不包括在内


这方面的文档是,我想您正在寻找它。

这看起来像是“阅读文档”键入问题。你读过TreeSet API吗?如果读过,那么耳机方法会让你感到困惑吗?我读过TreeSet和method headSet,我知道它返回的值严格来说比较少,但有方法公共分类的数据集headSet(E-toElement,布尔值包含在内)它可以返回不严格的值。我不知道如何覆盖比较器,这样这种耳机就可以工作了。你不必更改比较器——这很好。但是在将来(甚至现在)请发布格式良好的代码。请记住,您正在向志愿者寻求帮助,您所能做的任何事情都将使其他人更容易理解您的代码。我阅读了关于TreeSet和method headSet的文章,我知道它返回的值严格来说比较少,但有method public SortedSet headSet(E-toElement,包含布尔值)可以返回不严格的值。我不知道如何覆盖比较器以使这个耳机变体工作不?它给了Ann,height=150 Jane,height=150 John,height=180?但我只需要Ann,height=150 Jane,height=150哦,我错了。tr2=(TreeSet)ps.headSet(p,true);返回Ann,height=150 Jane,height=150 John,height=180/您的变体返回Nothing如果高度相同,您的比较器将按名称进行比较。这就是为什么如果高度相同,您无法在headSet()中对此进行任何处理的原因。如果您这样做,您的结果将如您所愿:Person p=new Person(“abcde”,150);不幸的是,此变体没有帮助
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);
} 
TreeSet<Person> tr2 = new TreeSet<Person>(new Compar());
Person p = new Person("",150);
tr2 = (TreeSet<Person>) ps.headSet(p,true);