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


133

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


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, который предоставляет вам метод для определения критериев сортировки.

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


2

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

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

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


1

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

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

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


0

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.