2

我定义了一个自定义比较器来按长度对我的对象的名称(字符串)变量进行排序。

这是我的person类的代码:

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);,然后将其添加到我的 TreeSetmyTreeSet.addAll(personList)

但它不是按名称长度排序的:(

4

3 回答 3

3

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

于 2011-05-08T04:14:25.650 回答
1

你用 Comparator 构造 TreeSet 吗?如果不是,Tree 可能会忽略您的比较器和之前的排序,并使用其内容的自然排序,由其 Comparable compareTo 方法指定。

于 2011-05-08T04:13:51.693 回答
1

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

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

2)当你把这个集合加入TreeSet时,它又被排序了一次,此时使用了Person.compareTo();

3)尽量不使用Comparator,尽量在Person类中实现Comparable接口,直接将list添加到树中,不使用Collections进行排序。

于 2011-05-08T04:16:45.790 回答