Java: проблема с TreeSet и LinkedList - PullRequest
0 голосов
/ 12 октября 2009

У меня есть несортированный связанный список. Для сортировки я решил поместить значения в TreeSet с предоставленным компаратором, а затем вернуть эти значения в виде нового связанного списка. Тем не менее, это терпит неудачу.

Компаратор:

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);
}

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

Ответы [ 2 ]

7 голосов
/ 12 октября 2009

Почему вы не используете 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?

1 голос
/ 12 октября 2009

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

...