Относительная сортировка-методы insertBefore() и insertAfter()
Мне нужно отсортировать список, чьи элементы являются объектами, которые описывают, как элементы должны быть отсортированы относительно других элементов в том же списке. Элементы загружаются динамически, поэтому у меня нет возможности убедиться, что они упорядочены с самого начала.
На какие списки я должен смотреть? В ArrayList нет таких методов, как insertBefore () или insertAfter (). LinkedLists может, но я не уверен, что реализация Java LinkedLists предоставляет такие методы. Есть идеи?
Примечание: я должен уточнил, что у меня нет дубликатов в моем массиве...
5 ответов:
Вместо того, чтобы писать свою собственную процедуру сортировки, вы должны использовать
Collections.sort(List,Comparator)
. Это сортирует любыеList
, используя предоставленный компаратор.Вам нужно будет реализовать компаратор , который будет производить желаемое упорядочение.
Если это не применимо к рассматриваемой проблеме, пожалуйста, уточните свои требования, возможно, приведя пример.
в ArrayList нет таких методов, как insertBefore () или insertAfter ().
Нет, но у него есть
indexOf(o)
иadd(o, index)
, которых должно быть достаточно для простой реализацииinsertBefore
иinsertAfter
.
Если вы хотите вставить новые элементы и сохранить коллекцию отсортированной, вы можете использовать класс priorty queue в Java. Наборы не позволят вам хранить дубликаты. Для получения дополнительной информации о приоритетной очереди, вы можете посмотреть на этот ответ
Попробуйте класс SortedSet.
Если вы правильно реализуете сопоставимый интерфейс, он автоматически отсортирует его для вас.
Если вы можете сделать obejcts реализуют сопоставимые, то вызов коллекций.сортировка(myArrayList) разберется любой объект, в том числе класса ArrayList.
Альтернативно используйте коллекции.сортировка (myArrayList, myComparator) с аппроксимирующим компаратором