Относительная сортировка-методы insertBefore() и insertAfter()


Мне нужно отсортировать список, чьи элементы являются объектами, которые описывают, как элементы должны быть отсортированы относительно других элементов в том же списке. Элементы загружаются динамически, поэтому у меня нет возможности убедиться, что они упорядочены с самого начала.

На какие списки я должен смотреть? В ArrayList нет таких методов, как insertBefore () или insertAfter (). LinkedLists может, но я не уверен, что реализация Java LinkedLists предоставляет такие методы. Есть идеи?

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

5 3

5 ответов:

Вместо того, чтобы писать свою собственную процедуру сортировки, вы должны использовать Collections.sort(List,Comparator). Это сортирует любые List, используя предоставленный компаратор.

Вам нужно будет реализовать компаратор , который будет производить желаемое упорядочение.

Если это не применимо к рассматриваемой проблеме, пожалуйста, уточните свои требования, возможно, приведя пример.

в ArrayList нет таких методов, как insertBefore () или insertAfter ().

Нет, но у него есть indexOf(o) и add(o, index), которых должно быть достаточно для простой реализации insertBefore и insertAfter.

Если вы хотите вставить новые элементы и сохранить коллекцию отсортированной, вы можете использовать класс priorty queue в Java. Наборы не позволят вам хранить дубликаты. Для получения дополнительной информации о приоритетной очереди, вы можете посмотреть на этот ответ

Сортированная коллекция в Java

Попробуйте класс SortedSet.

Если вы правильно реализуете сопоставимый интерфейс, он автоматически отсортирует его для вас.

Если вы можете сделать obejcts реализуют сопоставимые, то вызов коллекций.сортировка(myArrayList) разберется любой объект, в том числе класса ArrayList.

Альтернативно используйте коллекции.сортировка (myArrayList, myComparator) с аппроксимирующим компаратором