Яка різниця між замовленою та відсортованою колекцією?


132

Чи є різниця між відсортованою та замовленою колекцією?


1
Не сприймайте відповіді тут занадто буквально. Незважаючи на те, що таке визначення широко розуміється і визнається, воно не є фактичним визначенням у комп'ютерній термінології. Наприклад, в .NET викликається інтерфейс для "відсортованих" перелічувальних номерів IOrderedEnumerable (смішна річ, це не дуже послідовно в .NET. Словник "порядку вставки" в .NET називається словником, OrderedDictionaryякий деякі вважають неправильним порівняно з, наприклад, IndexedDictionary) . Так, у світі java (здебільшого в інших місцях) вони означають, що ти маєш у відповідях. Детальніше дивіться тут .
nawfal

Якщо якийсь екземпляр реалізації неправильно називає ім'я, це не є підставою для поширення його помилки. Це гарне запитання, з хорошими відповідями. Використовуйте належне іменування - допомагає зменшити плутанину для всіх, включаючи себе.
foo

Відповіді:


166

Упорядкована колекція означає , що елементи колекції мають порядок конкретний. Порядок не залежить від значення. Список є прикладом.

Відсортовано по збору коштів , які не тільки колекціям є порядок, але порядок залежить від значення елемента. SortedSet є прикладом.

Навпаки, колекція без будь-якого порядку може підтримувати елементи в будь-якому порядку. Набір є прикладом.


1
Чи в черзі пріоритетна впорядкована колекція?
переоцінка

@overexchange З огляду на вищенаведені визначення, в більшості випадків черговість пріоритетів буде відсортованою колекцією, оскільки пріоритет майже завжди визначається як властивість елементів у черзі.
cdeszaq

Якщо SortedSet успадкував від Set і має відносини з ним, то як можна сказати, що Set без будь-якого замовлення
xpioneer

79

Впорядкована колекція підтримує порядок елементів, виходячи з послідовності введення матеріалів / видалення їх із колекції.

Відсортована колекція зберігає елементи, відсортовані на основі критеріїв сортування.


18

Java використовує "упорядковану колекцію" для позначення такої колекції, як List, де (на відміну від HashSet), колекція пам'ятає, в якому порядку мають бути елементи. Отже, елементи можна додати до колекції у певному "місці" порядку .

Java використовує "відсортовану колекцію" для позначення такої колекції, як SortedSet, де (на відміну від Список), порядок, який ітератор перетинає колекцію, відповідає визначеному компаратору або природному порядку елементів.

Отже, різниця полягає в тому, чи впорядкованість залежить від значень ("відсортовано"), чи є властивістю елементів, які мають незалежно від їх значення ("упорядковані").


1
Хороша відповідь та +1 за згадування "Java". Це свого роду прийняте визначення і в більшості місць, як OrderedDictу python. Але в .NET інтерфейс для "відсортованих" чисел викликається IOrderedEnumerable. Так це залежить. Просто кажу ..
nawfal

9

Так, хоча поняття схожі.

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

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

Впорядкована колекція може бути сортована, але не повинна бути (наприклад, після використання Collections.sort()), коли зовнішнє впорядкування ідентичне порядку сортування елементів. Впорядкована колекція завжди неявно впорядкована (тобто завжди є "перший" елемент, і він завжди такий самий, доки ви не додасте інший, менший).


5

Впорядкована колекція - це колекція, яка відслідковує послідовний індекс, в який вставляється кожен елемент.

Сортована колекція - це упорядкована колекція, коли порядок додатково залежить від значення елемента, який потрібно вставити, протягом усього використання Порівнюваного інтерфейсу, який надає вам метод визначення критеріїв сортування.

Я сподіваюся, що це може допомогти.


2

Сортування має на увазі впорядкування відповідно до впровадження Порівняльного або Порівняльного. Упорядкований означає, що він слідує порядку вставки або іншому визначенню порядку, який є послідовним і визначеним, але в іншому випадку довільним.

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

Звичайно, у класі Колекції є методи сортування списку.


1

Впорядкована колекція зазвичай означає, що елементи сортуються від мінімального значення до максимального значення або навпаки залежно від атрибутів (елементів) елементів, над якими працюють алгоритми.

для колекцій interger, сортування може бути від мінімального числа до максимального числа для колекції для людини, воно може бути розсіяне за ростом осіб або вагою осіб тощо.

Якщо говорити про порядок, то це зазвичай означає порядок вставки. Порядок може бути змінено після сортування


0

Відсортована колекція проти замовленої колекції

1. Відсортований збірник

Відсортована колекція - це сортування колекції за допомогою функцій сортування, наданих рамкою колекцій Java. Сортування відбувається в пам'яті JVM, який працює в сплячому режимі, після зчитування даних із бази даних за допомогою компаратора Java.

Якщо ваша колекція не велика, це буде більш ефективним способом її сортування. Як це відбувається в jvm-пам'яті, вона може викинути помилку пам'яті.

2. Збір замовлень

Колекція замовлень - це сортування колекції шляхом вказівки порядку в порядку запиту для сортування цієї колекції під час пошуку. Якщо ваша колекція дуже велика, це буде більш ефективним способом її сортування. Це швидко порівняно з відсортованою колекцією.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.