自定义字符串长度比较器:我的错误是什么?

时间:2011-05-08 04:11:15

标签: java collections treeset

我定义了一个自定义比较器来按长度对对象的名称(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)

但它没有按姓名长度排序:(

3 个答案:

答案 0 :(得分:3)

在将其添加到树集之前,您无需对其进行排序。唯一重要的是树集是否有比较器。

答案 1 :(得分:1)

您是否使用比较器构造TreeSet?如果没有,树可能会忽略您的比较器和先前的排序,并使用其Comparable compareTo方法指定的内容的自然排序。

答案 2 :(得分:1)

嗯,我认为还有下一个问题:

1)Collections.sort正在正确排序您的列表。

2)当您将此集合添加到TreeSet时,它会再次排序,此时使用Person.compareTo();

3)尽量不使用Comparator,尝试在Person类中实现Comparable接口并直接向树中添加列表,而不用Collections进行排序。