【最大10000ポイント】当たる!!質問投稿キャンペーン!

下記のようなクラスがありこのクラスのソートを
したいのですが、具体的にどのようにすればよいのでしょうか?
調べてみると、Comparatorインタフェースを継承すればソートできるようなのですが、あまり既存のクラスを変更
したくありません。クラスを変更せずにソートする方法
はあるのでしょうか?

public class TestClass{

private String[] cbSelItem;
private String[] hdSelItemFlg;

public String[] getCbSelItem() {
return cbSelItem;
}

public void setCbSelItem(String[] cbSelItem) {
this.cbSelItem = cbSelItem;
}

public String[] getHdSelItemFlg() {
return hdSelItemFlg;
}

public void setHdSelItemFlg(String hdSelItemFlg[]) {
this.hdSelItemFlg = hdSelItemFlg;
}

}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

補足です。

Comparatorは、何か別のクラスに実装すればいいので、
ソートするクラス自体に手を加える必要はありません。
安心してください。

下のコードでは、その「何か別のクラス」に、
無名内部クラスを使っているわけです。
これは、ちゃんと名前の付いた、独立したクラスを
使ったってもちろんかまいません。
ただ一回しか使わないものだし、命名の手間が増えるので、
無名内部を使うと便利だと言うことです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/05/19 18:49

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

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング