arraylist中存在sort排序方法,只要你實現了comparator的介面,按照你自己的排序業務進行實現,你只要告訴這個介面按照什麼型別進行排序就ok了。這種方式類似於設計模式中的策略模式,把流程劃分好,具體的業務邏輯由使用者指定
**實現:
由於現在主流jdk都公升級到1.8以上,所以使用lamda表示式實現,這裡簡單介紹一下lamda表示式使用:public
class
comparatortest
private
static
void
referencetypesort()
private
static
void
basetypesort()
;// 構建成乙個集合
list
list =
newarraylist
<
>()
;for
(int i =
0; i < data.length; i++
) system.out.
println
("排序前:"
+ list)
;//逆序
list.
sort
((o1, o2)
-> o2 - o1)
; system.out.
println
("降序:"
+ list);}
}
注意點:
collections.sort方法底層就是呼叫的arrays.sort方法,而arrays.sort底層呼叫了乙個非常優秀的工程排序實現演算法:timsort,timsort是一種結合了歸併排序和插入排序的混合演算法,由tim peters在2023年提出,並且已經成為python 2.3版本以後內建排序演算法。
在資料量小的時候使用插入排序,雖然插入排序的時間複雜度是o(n^2),但是它的常數項比較小,在資料量較小的時候具備較快的速度。
在資料量較大的時候,如果是基本型別,使用快速排序,如果是引用型別使用歸併排序。這是因為快速排序是不穩定的,而插入排序和歸併排序都是穩定性排序。
自定義實現ArrayList
package com.mylist public class myarraylist 返回list的大小 return public int size 判斷是否為空 return public boolean isempty 建立指定大小的list集合 param init public myar...
模仿原始碼自定義ArrayList
最近看了下arraylist的原始碼,抽空根據arraylist的底層結構寫了乙個功能簡單無泛型的自定義arraylsit,幫助自己更好理解arraylist 其實現的底層資料結構為數object組,如下 自己實現乙個arraylist public class myarraylist public...
自定義ArrayList 二 陣列擴容
接自定義陣列 一 在前面的基礎上加上了陣列擴容的修改,這種情況是在儲存的資料過大超過原先的陣列容量時,為了避免資料溢位,來進行的操作。public class setarrylist public setarrylist int capacity public void add e element ...