Collections.sort()
Arraylist
ソートを行う際に毎回必要 になるので、開発した「偉人」は拡張クラスとしてクラスをArraylist
追加しませんか?Collections
3 に答える
3
Collections
classでの 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
Collections
はユーティリティ クラス、ArrayList
はデータ構造です。どちらも異なる目的のために存在します。Collections.sort()
をソートするためのユーティリティ メソッドList
です。これを 1 つの場所に保持すると、コードの冗長性が回避されます。Collections.sort()
は静的メソッドであるため、オーバーライドできません。いずれかの
List
実装がCollections
class を拡張する場合、将来、他のクラスを拡張することはできなくなります。
于 2013-04-18T09:02:41.370 に答える
1
それは次の理由による可能性があります
- ArrayList はすでに AbstractList を拡張しており、Java で拡張できるクラスは 1 つだけです
- コレクションのすべての機能は静的です
- in が static でない場合に備えて、メソッドをオーバーライドすることを望んでいません。
- それらを最終的な非静的メソッドに変換できると主張する場合、コレクションを基本クラスとして作成しても役に立ちません。
- コレクション内のメソッドは、ArrayList で実行できるジョブの一部にすぎず、ArrayList が何をすべきかを定義していません。したがって、OOP の観点からは、どちらの「偉人」もそれをしなかったでしょう。
于 2013-04-18T09:06:44.343 に答える