ArrayList實現自定義排序

2021-10-01 09:55:39 字數 1110 閱讀 9037

arraylist中存在sort排序方法,只要你實現了comparator的介面,按照你自己的排序業務進行實現,你只要告訴這個介面按照什麼型別進行排序就ok了。這種方式類似於設計模式中的策略模式,把流程劃分好,具體的業務邏輯由使用者指定

**實現:

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);}

}

由於現在主流jdk都公升級到1.8以上,所以使用lamda表示式實現,這裡簡單介紹一下lamda表示式使用:

注意點:

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 ...