Чудове запитання та чудові відповіді. Просто думав, що додам кілька моментів, щоб врахувати:
- Якщо ваша Колекція для сортування недовговічна, наприклад, використовується як аргумент методу, і вам потрібен список, відсортований у методі, тоді використовуйте Collections.sort (колекція). Або якщо це довгожитель, але сортувати його потрібно дуже рідко.
Обґрунтування: Відсортований збірник потрібен для чогось конкретного, і ви, ймовірно, не будете часто додавати чи видаляти. Тож ви насправді не піклуєтесь про елементи колекції, як тільки вона буде відсортована. Ви в основному:
сортувати -> використовувати -> забути
Якщо ви додасте новий елемент до відсортованої колекції, вам доведеться сортувати колекцію ще раз, оскільки порядок не гарантується при вставці нового елемента.
- Якщо ваша Колекція, яку потрібно відсортувати, є довгожителем та / або якщо це поле в класі, і Вам потрібно її сортувати постійно, тоді слід використовувати відсортовану структуру даних, таку як TreeSet.
Обґрунтування: Ви завжди дбаєте про порядок збору. Ви хочете, щоб його постійно сортували. Отже, якщо ви постійно додаєте або видаляєте елементи, ви маєте гарантію, що колекція сортується. Отже, в основному:
вставити / видалити -> використовувати його (весь час ви маєте гарантію, що колекція сортується)
Не існує конкретного моменту, коли вам потрібно сортувати колекцію, натомість ви хочете, щоб колекція постійно сортувалась.
Недоліком використання TreeSet є ресурси, необхідні для збереження відсортованої колекції. Він використовує червоно-чорне дерево, і йому потрібні O (log n) витрати часу на операції get, put.
Тоді як якщо ви використовуєте просту колекцію, таку як ArrayList, операції get, add мають O (1) постійний час.