2010-11-02 65 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 

如何将Collection快速转换为List?java收集缓慢转换

谢谢。

+0

您发表评论说,从Map.values()的输出中创建一个新的ArrayList非常缓慢,但是使用2500元素的地图肯定会产生差异吗?换句话说,这看起来像是我的一个微型优化。 – Adamski 2010-11-02 08:46:23

+0

什么是IMap? – 2010-11-02 10:06:55

+0

种类的地图 - 在内存数据网格 - hazelcast.com – Altug 2010-11-03 06:15:30

回答

3

如果你有一个Collection这不是一个List,你想把它作为一个List,还有比这样做new ArrayList(yourCollection)方式没有更快。 (我不相信构造函数会做任何不必要的工作,你可以跳过,可以这么说)。

但是你可以做的是改变原始的集合。如果它现在是HashMap,那么您的迭代将需要与其容量成比例的时间。通过更改为LinkedHashMap,您可以按照与其大小成比例的时间遍历它。 (可能是微不足道的差异,但它可能值得一试。)

+0

这是错字;它已经是这样了 List listVehicle = new ArrayList(collectionVeh); //很慢 – Altug 2010-11-02 07:47:40

0

你能试试Arrays.asList(collectionVeh.values().toArray)吗?可能会跑得更快?

+0

性能几乎相同 – Altug 2010-11-02 07:56:01

2

如果将车辆放入TreeSet中,它会更快吗?