配列を使うとどうしても配列の要素数を先に決めなければなりません。これをしなくてもいいのがリストです。配列に比べ、data[8]などのインデックスを指定してのアクセスはdata.get(8)などと代わりますが、このような作業は苦手です。多少時間がかかるようになります。
下記の例ではプログラムの内容はOOkiiJun41.javaと少し異なりますが、配列の代わりにリストを使った部分の色を変えてあります。
それほど違わないということがわかると思います。
import java.io.*; import java.util.*; public class OokiiJun51 { String jnum ; int ten1 ; int ten2 ; int ten3 ; int soukei ; public OokiiJun51( String line, String sep) { String[] tmp = line.split(sep); jnum = tmp[0]; ten1 = Integer.parseInt(tmp[1]); ten2 = Integer.parseInt(tmp[2]); ten3 = Integer.parseInt(tmp[3]); soukei = ten1 + ten2 + ten3; } public String toString() { return jnum+" "+ten1+" "+ten2+" "+ten3+" "+soukei; } public static void main( String[] args ) { String sep = "\t"; String fname = "data51.txt"; LinkedList<OokiiJun51> jlist = new LinkedList<OokiiJun51>(); try { FileReader in = new FileReader(fname); BufferedReader inb = new BufferedReader(in); String line; while ((line = inb.readLine()) != null) { jlist.add( new OokiiJun51(line,sep)); } inb.close(); in.close(); } catch (IOException e) { System.err.println( fname + " がないのでは?" ); System.err.println( e); } //sort Collections.sort(jlist,new SoukeiComp()); int ct = jlist.size(); for (int i = 1; i < ct ; i++) { System.out.println(jlist.get(i)); } } } class SoukeiComp implements Comparator<OokiiJun51>{ public int compare(OokiiJun51 x, OokiiJun51 y) { return y.soukei - x.soukei; } }
toString() メソッドを使っていますが、print()メソッドと同様な目的です。本質とは関係ありません。このようにもできるということです。toString() があると、System.out.println()の中で、jlist.get(i).toString() と書くべき所を、jlist.get(i) と省略できるというだけのことです。
データはこのプログラムだけ別なものを使います。
このデータはもともと10行のデータです。下記をコピーして作りなさい。データの区切りはタブで k2Editorでは → のように表されています。(これをスペースにしてはいけません)
n101 65 67 52 n102 35 39 38 n103 55 80 40 n104 52 86 61 n105 63 72 65 n106 44 50 52 n107 45 57 59 n108 63 42 55 n109 45 58 50 n110 52 81 65
ソートした結果はこのようになります。
n104 52 86 61 199 n110 52 81 65 198 n101 65 67 52 184 n103 55 80 40 175 n107 45 57 59 161 n108 63 42 55 160 n109 45 58 50 153 n106 44 50 52 146 n102 35 39 38 112
上記プログラムを確認しなさい。
OokiiJun42.java の配列を使っている部分を、LinkedListを使うように書き改めなさい
まず、OokiiJun42.java をコピーしてOokiiJun52.java とし、プログラム中の OokiiJun42 をすべて OokiiJun52 にします。
上記を参考にしながら、LinkedList を使うように書き換えます。
使い方と結果は OokiiJun42.java と同じです。