Настройка компаратора при создании экземпляра для параметризованного связанного списка
Я работаю над сортированным домашним заданием по связанному списку и не понимаю, как настроить компаратор. Я написал класс связанного списка, который параметризован для принятия любого класса. Связанный список работает нормально, но я не уверен, как установить компаратор для списка, потому что он параметризован. Должен ли я сначала создать класс компаратора и передать его конструктору? Компаратор будет использоваться для поддержания порядка в списке. Или мне нужно, чтобы внутри класса, который я установил, была переменная, которая изменяет поведение компаратора, определенного в классе связанного списка? Извините, если это не имеет особого смысла, так как я немного запутался. Спасибо!
РЕДАКТИРОВАТЬ:
Я должен был уточнить, нам не разрешено использовать Linked List из библиотеки коллекций Java, мы разрабатываем свои собственные (да, я знаю, что я бы не стал этого делать на практике, но это изгнание с домашней работой). Мой класс Linked List выглядит примерно так:
public class LinkedList<T> implements Iterable<T> {
private LinkedListNode<T> head = null;
private int size = 0;
.
.
.
//various methods for retrieving size, iterator etc...
}
После вставки элемента его следует поместить в правильное место. Моя идея состоит в том, чтобы определить это с помощью компаратора, который передается при создании экземпляра объекта Linked List. Может быть, что-то вроде этого:
LinkedList<MyClass> myList(MyClass.myComparator);
Моя проблема заключается в том, что мне нужно иметь несколько компараторов для одного и того же класса (MyClass), которые используются в течение всего времени существования объекта. Я также запутался, как установить компаратор в Linked List после его передачи.
1 ответ
LinkedList
не является отсортированной коллекцией, поэтому вы не можете передать ее Comparator во время создания. Заметьте, что ни один из его конструкторов не принимает Comparator
,
Вместо этого вы должны построить его и добавить к нему, а затем использовать
Collections.sort(myList, new MyComparator());
Вы можете написать Comparator
параметризованного типа T
со следующим синтаксисом.
public class MyComparator implements Comparator<T>() {
public int compare (T a, T b) {
// Put comparison logic here.
}
}
Очевидно, вы хотите заменить T
выше с именем вашего типа.