簡體   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