В чем разница между упорядоченной и отсортированной коллекцией?

133

Есть ли разница между отсортированной и упорядоченной коллекциями?

Johanna
источник
1
Не принимайте здесь ответы слишком буквально. Хотя такое определение широко понимается и признается, оно не является де-факто определением в компьютерной терминологии. Например, в .NET вызывается интерфейс для «отсортированного» перечислимого IOrderedEnumerable (забавно то, что он не очень согласован в .NET. В .NET вызывается словарь «порядок вставки» в отношении словаря, OrderedDictionaryчто, по мнению некоторых, является неправильным по сравнению со словами, IndexedDictionary) . Да, в мире Java (в основном в другом месте) они имеют в виду то, что у вас есть в ответах. Подробнее см. Здесь .
nawfal
Если какой-то экземпляр реализации получает неправильное имя, это не повод для распространения ошибки. Хороший вопрос с хорошими ответами. Используйте правильное именование - это поможет избежать путаницы для всех, включая вас самих.
foo

Ответы:

169

Упорядоченная коллекция означает , что элементы коллекции имеют порядок конкретный. Порядок не зависит от значения. Список является примером.

Отсортировано по сбору средств , которые не только коллекциям есть порядок, но порядок зависит от значения элемента. SortedSet является примером.

Напротив, коллекция без какого-либо порядка может поддерживать элементы в любом порядке. Набор является примером.

грамм .
источник
1
Является ли очередь Priority упорядоченной коллекцией?
overxchange
@overexchange С учетом приведенных выше определений приоритетная очередь в большинстве случаев будет сортированной коллекцией, поскольку приоритет почти всегда определяется как свойство элементов в очереди.
cdeszaq
Если SortedSet унаследован от Set и имеет с ним отношения is-a, тогда как вы можете сказать, что Set не имеет никакого порядка?
xpioneer
79

Упорядоченная коллекция поддерживает порядок элементов на основе последовательности, в которую вы помещаете материал / удаляете их из коллекции.

В отсортированной коллекции элементы отсортированы на основе критериев сортировки.

н.у.к.
источник
18

Java использует «упорядоченную коллекцию» для обозначения коллекции, такой как List, где (в отличие от HashSet) коллекция запоминает, в каком порядке должны быть элементы. Таким образом, элементы могут быть добавлены в коллекцию в определенном «месте» в порядке ,

Java использует «отсортированную коллекцию» для обозначения коллекции, такой как SortedSet, где (в отличие от List) порядок, в котором итератор проходит по коллекции, соответствует заданному Comparator или естественному порядку элементов.

Таким образом, разница в том, зависит ли порядок от значений («отсортировано») или это свойство, которое элементы имеют независимо от их значения («упорядочено»).

Стив Джессоп
источник
1
Хороший ответ и +1 за упоминание "Java". Это своего рода общепринятое определение в большинстве случаев, например, OrderedDictв python. Но в .NET интерфейс для «отсортированного» перечислимого называется IOrderedEnumerable. Так что это зависит от обстоятельств. Просто говорю ..
nawfal
9

Да, хотя концепции похожи.

List - это упорядоченная коллекция: каждый элемент имеет индекс, который формирует порядок элементов, но обычно не связан с каким-либо свойством самих элементов.

SortedMapи SortedSetявляются отсортированными коллекциями, что означает, что итерация по коллекции будет происходить в последовательности, полученной из самих элементов. Например, если у вас есть, SortedSet<String>то строки будут отсортированы в соответствии с лексикографическим порядком сортировки.

Упорядоченную коллекцию можно сортировать, но не обязательно (например, после использования Collections.sort()), если внешний порядок совпадает с порядком сортировки элементов. Сортированная коллекция всегда неявно упорядочена (т.е. всегда есть «первый» элемент, и он всегда один и тот же, пока вы не добавляете другой, меньший по размеру).

Майкл Боргвардт
источник
5

Упорядоченная коллекция - это коллекция, которая отслеживает последовательный индекс, в который вставлен каждый элемент.

Сортированная коллекция - это упорядоченная коллекция, когда порядок дополнительно зависит от значения элемента, который нужно вставить, на протяжении всего использования интерфейса Comparable, который предоставляет вам метод для определения критериев сортировки.

Надеюсь, это поможет.

gvalenncia
источник
2

Сортировка подразумевает упорядочение в соответствии с реализацией Comparable или Comparator. Упорядоченный будет означать, что он следует порядку вставки или другому определению порядка, которое является согласованным и определенным, но в остальном произвольным.

Таким образом, отсортированный список строк будет отсортирован в соответствии с методом String.compareTo. Список может содержать список строк, вставленных в произвольном порядке, но этот порядок всегда остается неизменным.

Конечно, в классе Collections есть методы для сортировки списка.

Ишай
источник
1

Сортированная коллекция обычно означает, что элементы отсортированы от минимального значения до максимального значения или наоборот, в зависимости от атрибута (ов) элементов, с которыми работают алгоритмы.

для нескольких коллекций сортировка может быть от минимального числа до максимального числа для коллекции людей, она может зависеть от роста людей или веса людей и т. д.

Когда говорят о порядке, это обычно означает порядок вставки. Порядок может быть изменен после сортировки

sotondolphin
источник
0

Отсортированная коллекция против упорядоченной коллекции

1. Отсортированная коллекция

Сортированная коллекция сортирует коллекцию с использованием функций сортировки, предоставляемых платформой коллекций Java. Сортировка происходит в памяти JVM, на которой запущен Hibernate, после чтения данных из базы данных с помощью компаратора Java.

Если ваша коллекция невелика, это будет более эффективный способ ее сортировки. Как и в случае с памятью jvm, это может вызвать ошибку Out of Memory.

2. Сбор заказов

Коллекция заказов сортирует коллекцию путем указания в запросе предложения order-by для сортировки этой коллекции при извлечении. Если ваша коллекция очень большая, это будет более эффективный способ ее сортировки. Это быстро по сравнению с сортированной коллекцией.

hardikhirapara
источник