• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:既存のクラスをソートする方法)

既存のクラスを変更せずにソートする方法

このQ&Aのポイント
  • Comparatorインタフェースを継承せずに既存のクラスを変更せずにソートする方法について調べてみました。
  • Testclassというクラスを例に考えると、ソートするためにはComparatorインタフェースを実装してソートのルールを定義する必要があります。
  • しかし、既存のクラスを変更せずにソートする方法としては、Collectionsクラスのsortメソッドを使用し、ソートの順番を指定するComparatorオブジェクトを渡す方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

補足です。Comparatorは、何か別のクラスに実装すればいいので、 ソートするクラス自体に手を加える必要はありません。 安心してください。 下のコードでは、その「何か別のクラス」に、 無名内部クラスを使っているわけです。 これは、ちゃんと名前の付いた、独立したクラスを 使ったってもちろんかまいません。 ただ一回しか使わないものだし、命名の手間が増えるので、 無名内部を使うと便利だと言うことです。

k-makoto
質問者

お礼

2度もご丁寧なお返事をいただきありがとうございました。 無名内部クラスというのは今まで使ったことがありませんが、ちょっと調べてみて使用してみます。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

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

関連するQ&A