繁体   English   中英

我怎样才能更快地对ArrayList排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM