我定义了一个自定义比较器来按长度对对象的名称(String)变量进行排序。
这是我个人班的代码:
class MyNameLengthCompare implements Comparator<Person> {
@Override
public int compare(Person a, Person b) {
if(a.getName().length() > b.getName().length()) {
return -1;
} else if (a.getName().length() < b.getName().length()) {
return 1;
} else
return 0;
}
}
然后在我的主要方法中,我调用Collections.sort(personList, new MyNameLengthCompare);
,然后将其添加到我的TreeSet myTreeSet.addAll(personList)
但它没有按姓名长度排序:(
答案 0 :(得分:3)
在将其添加到树集之前,您无需对其进行排序。唯一重要的是树集是否有比较器。
答案 1 :(得分:1)
您是否使用比较器构造TreeSet?如果没有,树可能会忽略您的比较器和先前的排序,并使用其Comparable compareTo方法指定的内容的自然排序。
答案 2 :(得分:1)
嗯,我认为还有下一个问题:
1)Collections.sort正在正确排序您的列表。
2)当您将此集合添加到TreeSet时,它会再次排序,此时使用Person.compareTo();
3)尽量不使用Comparator,尝试在Person类中实现Comparable接口并直接向树中添加列表,而不用Collections进行排序。