java如何更快地排序ArrayList?
我正在做一个类项目,我需要根据自定义对象的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个元素进行排序。有什么建议吗
# 1 楼答案
目前,您的实现是
O(n^2)
,这意味着随着阵列的增长,时间将以二次方的方式扩展不必详细介绍使用mergesort(即
O(log(n) x n)
)的方法,最快的方法就是使用Java的内置解决方案进行排序链接到API。还有
Collection.sort(list, comparator)
允许您提供自己的comparator你想让它更快吗?您可以使用Java's new feature,它允许您并行地对多个核心进行排序。这是API。注意
Arrays.sort()
和Arrays.parallelSort()
将数组作为第一个参数。您需要使用list.toArray()
将列表转换为数组最后,请注意
List#sort()
仅在Java8中是introduced# 2 楼答案
使用
List::sort
方法:正如@lexicore在下面提到的,似乎},那么使用
getA()
返回一个数字类型,在这种情况下,如果它返回int
,那么最好使用comparingInt
而不是上面的comparing
,如果它是long
使用comparingLong
,或者如果它是float
/{comparingDouble
可以获得更好的性能