我正在做一个类项目,我需要根据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个元素。有什么建议吗?
答案 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。