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