2010-11-02 2 views
3
IMap<Long, Vehicle> mapVehicles = // get all vehicles , total 2500 unit 
Collection<Vehicle> collectionVeh = mapVehicles.values(); // fast 
// I want to sort it so wrap to ArrayList 
List<Vehicle> listVehicle = new ArrayList(collectionVeh .values()); // very slow 
Collections.sort(listVehicle);// fast 

Comment puis-je convertir Collection en Liste très rapidement?java collection lente conversion

Merci.

+0

Vous indiquez que créer une nouvelle ArrayList à partir de la sortie de Map.values ​​() est très lent, mais avec une carte de 2500 éléments, la différence est certainement négligeable? En d'autres termes, cela ressemble à une micro-optimisation pour moi. – Adamski

+0

Qu'est-ce qu'un IMap? –

+0

Type de carte - pour dans la grille de données de la mémoire - hazelcast.com – Altug

Répondre

3

Si vous avez un Collection ce n'est pas un List, et que vous voulez avoir comme List, il n'y a pas de moyen plus rapide que de faire quelque chose comme new ArrayList(yourCollection). (Je ne crois pas que le constructeur fasse un travail inutile que vous pourriez ignorer, pour ainsi dire.)

Ce que vous pourriez faire cependant est de changer la collection originale. Si c'est actuellement HashMap votre itération prendra du temps proportionnel à sa capacité. En passant à LinkedHashMap, vous pouvez itérer sur le temps proportionnellement à sa taille. (Probablement une différence négligeable, mais il pourrait être utile d'essayer.)

+0

Ceci est une faute de frappe; c'est déjà comme ça List listVehicle = new ArrayList (collectionVeh); // très lent – Altug

0

Pourriez-vous s'il vous plaît essayer Arrays.asList(collectionVeh.values().toArray)? Peut être que ça va courir plus vite?

+0

Presque la même performance – Altug

2

Est-ce plus rapide si vous déposez les véhicules dans un TreeSet à la place?