• ベストアンサー

ソートについて

array listをソートしたいのですが、複数のarray listをひとつのarray listを基準として、並び変えることは可能ですか? たとえば、1つが生徒の名前のarray listで、もう1つが成績のarray listだとしたら、名前のarray lisをあいうえお順にソートし、成績を成績順ではなく、名前に対応するように並びかえたいのです。 なにか方法があったらよろしくお願いします。

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

  • ベストアンサー
  • foxa-gogo
  • ベストアンサー率44% (38/85)
回答No.4

一番早いのはこれかと。 class Student implements Comparable{    String name;    int score;    public int compareTo(Student other){       return this.name.compareTo(other.name);    }    public String toString(){       return ("Name:" + this.name + ", Score:" + this.score); } class Main{     public static void main(String[] args){        List<Student> list = new ArrayList<Student>();        addStudents(list);        Collections.sort(list);        for(Student student : list){           System.out.println(student);        }     }//main     private void addStudents(List<Student> list){      //生徒をリストに加える     }//addStudents }

その他の回答 (4)

回答No.5

#4氏の実装がいいと思います。     private void addStudents(List<Student> list){      //生徒をリストに加える     }//addStudents あとは↑の部分を実装するだけ。 蛇足ですがStudentクラスにgetter/setterを用意してname,scoreをprivateにするとよくあるJavaの実装ぽくなる。

回答No.3

まちがってました。条件式にString型は使えない 文字列の1つ目をchar型にします if ( student[i].char(0) > student[i + 1].char(0) ) { これは例えば  'い' > 'あ' のような比較になります。 後はバブルソートです。

回答No.2

インスタンスを生成して、配列を格納する方法もあるけど、 Student[] data = { new Student("さとう", 100); new Student("きむら", 90); } 質問者さんにとって、この方法はまだ難しいと思うので。 以下の方法で、 配列を2つ用意して String[] student = { "お", "え", "う", "あ", "い", }; int[] point = { 90, 70, 60, 80, 100, }; for文で (int i = 0; i < point.length; i ++) { point[] をバブルソート(何のソートでも良い)で交換する point[] を、1個交換するたびに、student[]も交換する } その逆をやりたかったら、もう1個for文を書いて student[i]の1文字目に対してバブルソートをして下さい。 Stringクラスの substring() とかのメソッドを使ったらできます。 ヒント if ( student[i].substring(0) > student[i + 1].substring(0) ) { ※検証してないので、間違っていたらすいません ※名前が漢字だったら、配列をもう1個作ってください。つまり1回につき3つ交換することになりますね。

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

なぜ名前と成績を1つのオブジェクトにせず、別々に処理したいのでしょうか。

nyandafull
質問者

補足

他にもたくさんのarra listを使っているのですが、複数でもオブジェクトでまとめられますか?

関連するQ&A