Пользовательский компаратор длины строки: в чем моя ошибка? - PullRequest
2 голосов
/ 08 мая 2011

Я определил собственный компаратор для сортировки переменной name (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 ]

3 голосов
/ 08 мая 2011

Вам не нужно сортировать его, прежде чем добавить его в набор деревьев.Единственное, что имеет значение, это то, есть ли в наборе деревьев компаратор.

1 голос
/ 08 мая 2011

Ну, я думаю, что есть следующая проблема:

1) Collections.sort правильно сортирует ваш список.

2) Когда вы добавляете эту коллекцию в TreeSet, она сортируетсяеще один раз, и в этот раз используется Person.compareTo ();

3) Старайтесь не использовать Comparator, попробуйте реализовать интерфейс Comparable в классе Person и добавить список в дерево напрямую, без сортировки с коллекциями.

1 голос
/ 08 мая 2011

Создаете ли вы TreeSet с помощью компаратора? Если нет, дерево, скорее всего, игнорирует ваш компаратор и предыдущую сортировку и использует естественную сортировку своего содержимого, которая определяется его методом Comparable compareTo.

...