2009-10-12 3 views
0

У меня есть несортированный связанный список. Чтобы отсортировать его, я подумал, что я поместил значения в TreeSet с предоставленным компаратором, а затем вернул эти значения в качестве нового связанного списка. Но это терпит неудачу.Java: проблема с TreeSet и LinkedList

Компаратор:

public class SortSpeciesByCommonName implements Comparator<Species> { 

    /** 
    * a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. 
    */ 
    @Override 
    public int compare(Species arg0, Species arg1) { 
     return arg0.getName().compareTo(arg1.getName()); //arg.getName() is String 
    } 

} 

Сортировка функции:

public static LinkedList<Species> sortedAnimals(LinkedList<Species> animals) { 
    TreeSet<Species> sortedBreeds = new TreeSet<Species>(new SortSpeciesByCommonName()); 
    sortedBreeds.addAll(animals); 
    return new LinkedList<Species>(sortedBreeds); 
} 

При проверке значения, все, как представляется, по-прежнему в порядке ввода.

+0

Пожалуйста, добавьте класс вида и некоторые тестовые примеры. Я уменьшил класс вида до простых строк, и все работает нормально. – sanscore

ответ

7

Почему вы не используете Collections.sort(List,Comparator):

LinkedList<Species> sorted = new LinkedList<Species>(arg); 
Collections.sort(sorted, new Comparator<Species>() { 
    @Override 
    public int compare(Species s1, Species s2) { 
     return s1.getName().compareTo(s2.getName()); 
    } 
}); 

Мы не можем отладить программу и почему список не отсортирован. Можете ли вы предоставить тест? Что такое подпись Species.getName()? Это String?

+0

Вы должны ссылаться на перегрузку, которая берет 'Компаратор'. :-D –

1

Это не отвечает на ваш вопрос напрямую, но вам может быть проще просто использовать Collections.sort, передавая ваш список и компаратор. Сохраняет с помощью TreeSet.

+1

Плюс, TreeSet может иметь непреднамеренный побочный эффект устранения элементов с повторяющимися именами. –

Смежные вопросы