如何使耳机正常工作?

时间:2016-01-03 12:57:00

标签: 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, 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,height = 150 Jane,height = 150 John,height = 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);

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

是的,tr2中不会显示任何内容,因为.headSet()会返回此集合部分的视图,其元素严格 <{1}}(不包括)

所有其他p个对象等于/高于Person(150,150,180)。如果它们相等,则通过比较器将它们与p字段进行比较(因为您将name作为第二个参数传递给true。自.headSet() p以来是一个空字符串,它比其他名称少,因此不包括在内。

此文档为here,我认为您正在寻找.tailSet()