- ベストアンサー
既存のクラスを変更せずにソートする方法
- Comparatorインタフェースを継承せずに既存のクラスを変更せずにソートする方法について調べてみました。
- Testclassというクラスを例に考えると、ソートするためにはComparatorインタフェースを実装してソートのルールを定義する必要があります。
- しかし、既存のクラスを変更せずにソートする方法としては、Collectionsクラスのsortメソッドを使用し、ソートの順番を指定するComparatorオブジェクトを渡す方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足です。Comparatorは、何か別のクラスに実装すればいいので、 ソートするクラス自体に手を加える必要はありません。 安心してください。 下のコードでは、その「何か別のクラス」に、 無名内部クラスを使っているわけです。 これは、ちゃんと名前の付いた、独立したクラスを 使ったってもちろんかまいません。 ただ一回しか使わないものだし、命名の手間が増えるので、 無名内部を使うと便利だと言うことです。
その他の回答 (1)
- liar_adan
- ベストアンサー率48% (730/1515)
Stringの通常の順序でソートするだけなら、 java.util.Arraysのsort(Object[] a)メソッドでできます。 自分の好きな順序でソートしたい場合、 Comparatorを実装する必要が出てきます。 これは、無名内部クラスとして実装すればいいので、 それほど面倒ではないと思います。 と、ここまで書いて思い直したけど、 中のcdSelItemのソートとかじゃなく、このクラス自体を配列にしてソート? そうならやっぱりComparatorを実装する必要があります。 Comparatorは「どっちを先にしますよ」ということを 指定するためのものですから。 使い方は下記を参考にしてください。 import java.util.*; class ComparatorSample{ public static void main(String[] args){ String[] strings = {"abc", "def", "ghi"}; //無名内部クラスを宣言している Comparator comparator = new Comparator(){ //このメソッドで、「どちらが先か」を指定してやる。 //書き方についての注意はComparatorのドキュメントを参考。 public int compare(Object o1, Object o2){ //これは一例。普通の逆順になる。 return o2.hashCode() - o1.hashCode(); } }; for(int i=0; i<strings.length; i++){ System.out.println(strings[i]); } Arrays.sort(strings, comparator); for(int i=0; i<strings.length; i++){ System.out.println(strings[i]); } } }
お礼
2度もご丁寧なお返事をいただきありがとうございました。 無名内部クラスというのは今まで使ったことがありませんが、ちょっと調べてみて使用してみます。