- ベストアンサー
ソートについて
array listをソートしたいのですが、複数のarray listをひとつのarray listを基準として、並び変えることは可能ですか? たとえば、1つが生徒の名前のarray listで、もう1つが成績のarray listだとしたら、名前のarray lisをあいうえお順にソートし、成績を成績順ではなく、名前に対応するように並びかえたいのです。 なにか方法があったらよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
一番早いのはこれかと。 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)
- ProKaseifu
- ベストアンサー率51% (98/192)
#4氏の実装がいいと思います。 private void addStudents(List<Student> list){ //生徒をリストに加える }//addStudents あとは↑の部分を実装するだけ。 蛇足ですがStudentクラスにgetter/setterを用意してname,scoreをprivateにするとよくあるJavaの実装ぽくなる。
- pochi1234
- ベストアンサー率25% (1/4)
まちがってました。条件式にString型は使えない 文字列の1つ目をchar型にします if ( student[i].char(0) > student[i + 1].char(0) ) { これは例えば 'い' > 'あ' のような比較になります。 後はバブルソートです。
- pochi1234
- ベストアンサー率25% (1/4)
インスタンスを生成して、配列を格納する方法もあるけど、 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)
なぜ名前と成績を1つのオブジェクトにせず、別々に処理したいのでしょうか。
補足
他にもたくさんのarra listを使っているのですが、複数でもオブジェクトでまとめられますか?