Почему бы не использовать лучшее из обоих миров?Если вы никогда не используете его снова, сортируйте с помощью 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, но его легко реорганизовать)