如何更快地对ArrayList进行排序?

时间:2018-05-12 22:57:08

标签: java performance sorting arraylist

我正在做一个类项目,我需要根据int属性的值对自定义对象的ArrayLists进行排序。

我现在正在使用这样的东西:

var ceh = new CustomEventHandler();

var items = document.querySelectorAll(".question-summary.narrow");

ceh.add(items, ["mouseenter"], [function(tag, eventKey) {
    tag.style["background-color"] = "green";
}, function(tag, eventKey) {console.log(eventKey)}
]).add(items, ["mouseleave"], [function(tag, eventKey) {
    tag.style["background-color"] = "white";
}]);

如果ArrayList的元素少于10 ^ 4,则程序运行良好。但是如果我尝试排序10 ^ 5个元素需要几分钟,我需要排序10 ^ 6个元素。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

使用objectList.sort(Comparator.comparing(MyObject::getA)); 方法:

getA()

正如@lexicore在下面提到的,似乎int返回一个数字类型,在这种情况下,如果它返回comparingInt,那么最好使用comparing而不是long }上面,如果是comparingLong使用float或者是double / comparingDouble,那么请使用name : t e s t以获得更好的效果。

答案 1 :(得分:1)

目前,您的实现是O(n^2),这意味着随着阵列的增长,时间将以二次方式展开。

在没有详细介绍使用O(log(n) x n)的mergesort的情况下,最快的方法是使用Java的内置解决方案进行排序。

Collections.sort(list);

链接到API。还有Collection.sort(list, comparator)允许您提供自己的comparator

你想要它更快吗?您可以使用Java's new feature,它允许您并行地对多个核心进行排序。这是API。请注意,Arrays.sort()Arrays.parallelSort()将数组作为第一个参数。您需要使用list.toArray()将列表转换为数组。

最后,请注意List#sort()仅在Java 8中为introduced