[英]How can I sort an ArrayList faster?
我正在做一个类项目,我需要根据其int属性的值对自定义对象的ArrayList进行排序。
我正在使用类似这样的内容:
public static void Sort(ArrayList <MyObject> objectList){
for (int i = 0; i < list.size()-1; i++){
for (int j = 0; j < list.size()-1; j++){
if (objectList.get(j).getA() > objectList.get(j+1).getA()){
Collections.swap(objectList, j, j+1);
}
}
}
}
如果ArrayList的元素少于10 ^ 4,则程序运行良好。 但是,如果我尝试对10 ^ 5个元素进行排序,则需要花费几分钟,因此我需要对10 ^ 6个元素进行排序。 有什么建议么?
使用List::sort
方法:
objectList.sort(Comparator.comparing(MyObject::getA));
如@lexicore已经如下所述,它看起来像getA()
返回一个数字型,如果它返回在这种情况下int
那么它最好使用comparingInt
代替comparing
以上,如果是long
使用comparingLong
或者如果它是一个float
/ double
然后使用comparingDouble
以获得更好的性能。
当前,您的实现是O(n^2)
,这意味着随着数组的增长,时间将平方增长。
无需讨论使用O(log(n) xn)
mergesort的许多细节,最快的方法是使用Java的内置解决方案进行排序。
Collections.sort(list);
链接到API 。 还有Collection.sort(list, comparator)
,它允许您提供自己的比较器 。
您是否希望它更快? 您可以使用Java的新功能 ,该功能允许您并行处理多个内核。 这是API 。 请注意, Arrays.sort()
和Arrays.parallelSort()
将数组作为第一个参数。 您将需要使用list.toArray()
将列表转换为数组。
最后,请注意List#sort()
仅在Java 8中引入 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.