Почему бы не использовать лучшее из обоих миров? Если вы больше никогда не будете его использовать, отсортируйте с помощью TreeSet и инициализируйте ArrayList с содержимым
List<ComparableObject> sortedCollection =
new ArrayList<ComparableObject>(
new TreeSet<ComparableObject>(map.values()));
РЕДАКТИРОВАТЬ:
Я создал тест (вы можете получить к нему доступ на pastebin.com/5pyPMJav ), чтобы протестировать три подхода (ArrayList + Collections.sort, TreeSet и мой лучший подход из обоих миров), и мой всегда выигрывает. В тестовом файле создается карта с 10000 элементами, значения которых имеют намеренно неправильный компаратор, а затем каждая из трех стратегий получает возможность а) отсортировать данные и б) перебрать их. Вот пример вывода (вы можете проверить это сами):
РЕДАКТИРОВАТЬ: Я добавил аспект, который регистрирует вызовы Thingy.compareTo (Thingy), и я также добавил новую стратегию на основе PriorityQueues, которая намного быстрее, чем любое из предыдущих решений (по крайней мере, при сортировке).
compareTo() calls:123490
Transformer ArrayListTransformer
Creation: 255885873 ns (0.255885873 seconds)
Iteration: 2582591 ns (0.002582591 seconds)
Item count: 10000
compareTo() calls:121665
Transformer TreeSetTransformer
Creation: 199893004 ns (0.199893004 seconds)
Iteration: 4848242 ns (0.004848242 seconds)
Item count: 10000
compareTo() calls:121665
Transformer BestOfBothWorldsTransformer
Creation: 216952504 ns (0.216952504 seconds)
Iteration: 1604604 ns (0.001604604 seconds)
Item count: 10000
compareTo() calls:18819
Transformer PriorityQueueTransformer
Creation: 35119198 ns (0.035119198 seconds)
Iteration: 2803639 ns (0.002803639 seconds)
Item count: 10000
Как ни странно, мой подход лучше всего работает в итерации (я бы подумал, что в итерации не будет отличий от подхода ArrayList, есть ли у меня ошибка в моем тесте?)
Отказ от ответственности: я знаю, что это, вероятно, ужасный тест, но он помогает донести до вас суть, и я, конечно же, не манипулировал им, чтобы мой подход победил.
(Код имеет зависимость от apache commons / lang для разработчиков equals / hashcode / compareTo, но его должно быть легко реорганизовать)