2015-04-10 2 views
2

У меня есть LinkedList, который содержит данные для ученика, у него есть имя, gpa и ID # для каждого ученика, и каждый ученик является Узлом в LinkedList. Я хочу отсортировать свой LinkedList в алфавитном порядке по их именам, но я не понимаю, как использовать CompareTo() для сортировки. Поэтому прямо сейчас у меня есть метод compareTo, используя строку compareTo текущего name.compareTo (name_of_inputStudent). Итак, в моем методе сортировки, как бы я использовал этот вывод для сортировки моего массива? Я действительно не понимаю, как это поможет мне определить, какая строка принадлежит в позиции LinkedList.Использование compareTo() для сортировки LinkedList по алфавиту?

+0

Вы можете показать код, который у вас уже есть? –

+0

См. [Collections.sort()] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-) – GriffeyDog

+0

Возможно, вам необходимо реализовать сопоставимые в вашем классе контейнера и переопределить метод compareTo(). Затем вы можете вызвать Collections.sort() в своем списке, чтобы отсортировать имена. – Palcente

ответ

2

Если вам разрешено использовать библиотеку Java, вам не нужно ничего делать: просто передайте свой список sort, который автоматически использует compareTo, когда вы не передадите отдельный компаратор. Обратите внимание, что сортировка LinkedList дороже, чем сортировка ArrayList, поскольку для большинства современных алгоритмов сортировки на основе сравнения требуется произвольный доступ к списку, который является O (1) для списка массивов, но O (n) для связанного списка.

Если вы установили на реализацию своего собственного алгоритма сортировки, compareTo позволяет определить, если два объекта находятся в упорядоченном положении или если они должны поменяться местами:

  • Если объект ближе к передней части списка по сравнению с объектом, расположенным дальше от фронта, а результат отрицательный или нулевой, объекты находятся в правильном порядке относительно друг друга.
  • Если результат положительный, объекты должны меняться местами, так что один дальше с самого начала было бы ближе к началу.

Эти два соображения достаточно для реализации bubble sort.

2

Вы можете использовать метод Collections.sort(...). Вы можете найти javadoc here. Для использования метода ваш класс Student должен реализовать интерфейс Comparable. Итак, вы должны выбрать критерии сортировки для своего класса Student и реализовать его в методе compareTo.

0

В вашем классе Node LinkedList реализуется интерфейс Comparable и переопределяет метод compareTo. Затем вы можете использовать Collections.sort (List). Поскольку вы используете связанный список, сортировка будет неэффективной, так как получение элемента в LinkedList является последовательным обходом, то есть O (n).

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