Java再帰分類ソート:Sort()のComparatorを書き換えることにより、カスタマイズされた複雑なListやMapなどのカスタムソートルールを実現
本文:
プログラミング、特に最下位に偏ったり、ソートや比較に関連する機能を持っている場合、sortメソッドによく遭遇します.ソートや簡単なリストソートを満たすことができます.
しかし、リストのようなレビューのタイプに遭遇した場合、その中の1つのKeyを判断とソートとして取得するには、Sort()のComparatoを書き換えることを学ぶ必要があります(この方法はネストされたソートや階層、ツリーレベルのソートをすぐに解決することができます).例は以下の通りです.
例は再帰的に書き換える方法であり、参照および議論のために異なるレベルを分類してソートすることができる.
背景学習:
一般的なSort()の方法は2つあり、1つはArraysである.もう一つはCollectionsですsort;
両者の特徴は、Collectionです.sortの下地にはArraysが使われています.sortの方法は、以下の通りです.
Listを深く展開するsortは、最終的にArraysを呼び出したことを明らかにした.sortはソートし,最後に集合する.
jdk 7とjdk 8をよく耳にするArraysがありますsortには違いがあります.ソースコードを見てみましょう.
jdk7:
jdk8:
jdk 7が呼び出したのはComparableTimSortであることがわかる.sort(a);jdk 8はTimSortを呼び出す.sort(); クエリの知識によると、ComparableTimSortはカスタムコンパレータを使用しない.TimSort.sortは比較器に入力する必要がある.どちらも混合ソートを採用しており、単独で集計ソートを採用することはありません.
***https://www.toolsou.com/article/200539808】
プログラミング、特に最下位に偏ったり、ソートや比較に関連する機能を持っている場合、sortメソッドによく遭遇します.ソートや簡単なリストソートを満たすことができます.
しかし、リストのようなレビューのタイプに遭遇した場合、その中の1つのKeyを判断とソートとして取得するには、Sort()のComparatoを書き換えることを学ぶ必要があります(この方法はネストされたソートや階層、ツリーレベルのソートをすぐに解決することができます).例は以下の通りです.
//
private static void ReWriteSort(List
例は再帰的に書き換える方法であり、参照および議論のために異なるレベルを分類してソートすることができる.
背景学習:
一般的なSort()の方法は2つあり、1つはArraysである.もう一つはCollectionsですsort;
両者の特徴は、Collectionです.sortの下地にはArraysが使われています.sortの方法は、以下の通りです.
@SuppressWarnings("unchecked")
public static > void sort(List list) {
list.sort(null);
}
// List sort
@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
Listを深く展開するsortは、最終的にArraysを呼び出したことを明らかにした.sortはソートし,最後に集合する.
jdk 7とjdk 8をよく耳にするArraysがありますsortには違いがあります.ソースコードを見てみましょう.
jdk7:
//jdk7
public static void sort(Object[] a) {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a);
else ComparableTimSort.sort(a);
}
jdk8:
//jdk8
public static void sort(T[] a, Comparator super T> c) {
if (c == null){
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
jdk 7が呼び出したのはComparableTimSortであることがわかる.sort(a);jdk 8はTimSortを呼び出す.sort(); クエリの知識によると、ComparableTimSortはカスタムコンパレータを使用しない.TimSort.sortは比較器に入力する必要がある.どちらも混合ソートを採用しており、単独で集計ソートを採用することはありません.
***https://www.toolsou.com/article/200539808】