Pourquoi ne pas utiliser le meilleur des deux mondes? Si vous n'êtes jamais l'utiliser à nouveau, tri à l'aide d'un TreeSet et initialiser une liste de tableaux avec le contenu
List<ComparableObject> sortedCollection =
new ArrayList<ComparableObject>(
new TreeSet<ComparableObject>(map.values()));
EDIT:
J'ai créé un indice de référence (vous pouvez y accéder à pastebin.com/5pyPMJav) pour tester les trois approches (ArrayList + Collections.trier, TreeSet et mon meilleur des deux mondes avec une approche de la mine et gagne toujours. Le fichier de test crée une carte avec 10000 éléments, dont les valeurs ont volontairement terrible comparateur, et puis chacune des trois stratégies obtenir une chance pour une) trier les données et b) effectuer une itération sur elle. Voici quelques exemple de sortie (vous pouvez le tester vous-mêmes):
EDIT: j'ai ajouté un aspect que les journaux d'appels de Truc.compareTo ("Truc") et j'ai également ajouté une nouvelle Stratégie basée sur PriorityQueues qui est beaucoup plus rapide que les solutions précédentes (au moins dans le tri).
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
Étrangement, mon approche donne de meilleurs résultats dans l'itération (j'aurais pensé qu'il n'y aurait pas de différences à la liste de tableaux approche dans l'itération, puis-je avoir un bug dans mon test?)
Disclaimer: je sais que c'est probablement une terrible de référence, mais elle aide à obtenir le point à travers vous et je n'ai certainement pas la manipuler pour faire mon approche de la victoire.
(Le code a une dépendance à apache commons / lang pour l'est égal à / hashcode / compareTo les constructeurs, mais il devrait être facile à refactoriser le code de sortie)