-6

Collections.sort()Arraylistソートを行う際に毎回必要 になるので、開発した「偉人」は拡張クラスとしてクラスをArraylist 追加しませんか?Collections

4

3 に答える 3

3

Collectionsclassでの sort(list) の実装は次のとおりです。

132     public static <T extends Comparable<? super T>> void sort(List<T> list) {
133         Object[] a = list.toArray();
134         Arrays.sort(a);
135         ListIterator<T> i = list.listIterator();
136         for (int j=0; j<a.length; j++) {
137             i.next();
138             i.set((T)a[j]);
139         }
140     }

これは一般的であり、 の実装のすべてのインスタンスで動作することがわかりますList

Listはインターフェイスであるため、この実装を のインスタンス メソッドとして使用することはできません。これによりList、すべての具体的な実装で重複することを回避できます。そのため、これらのメソッドをサード パーティ クラスで定義する方が適切Collectionsです。

于 2013-04-18T09:04:43.183 に答える
2
  1. Collectionsはユーティリティ クラス、ArrayListはデータ構造です。どちらも異なる目的のために存在します。Collections.sort()をソートするためのユーティリティ メソッドListです。これを 1 つの場所に保持すると、コードの冗長性が回避されます。

  2. Collections.sort()は静的メソッドであるため、オーバーライドできません。

  3. いずれかのList実装がCollectionsclass を拡張する場合、将来、他のクラスを拡張することはできなくなります。

于 2013-04-18T09:02:41.370 に答える
1

それは次の理由による可能性があります

  1. ArrayList はすでに AbstractList を拡張しており、Java で拡張できるクラスは 1 つだけです
  2. コレクションのすべての機能は静的です
  3. in が static でない場合に備えて、メソッドをオーバーライドすることを望んでいません。
  4. それらを最終的な非静的メソッドに変換できると主張する場合、コレクションを基本クラスとして作成しても役に立ちません。
  5. コレクション内のメソッドは、ArrayList で実行できるジョブの一部にすぎず、ArrayList が何をすべきかを定義していません。したがって、OOP の観点からは、どちらの「偉人」もそれをしなかったでしょう。
于 2013-04-18T09:06:44.343 に答える