コレクションライブラリの使いかた

勝手に人のコードを添削。いや本当はコメントしようと思ったんだけど、はてなダイアリーだとコメントにソースコード入れると読みにくいかと思ったので、Entry 上げて Trackback
とりあえず元コードは以下。

Iterator itr = members.keySet().iterator();
while(itr.hasNext()) {
   String key = (String)itr.next();
   Koza tmp5 = (Koza)members.get(key);
   System.out.println("口座番号:" + tmp5.getNumber() + " 顧客氏名:" + tmp5.getName() + " 残高" + tmp5.getAsset());                        	
}

どうも前後のエントリのコードを見る限り J2SE 5 なので、Generics を使ったほうがいいのではないかってのと、そもそも keySet というより values ですむ問題なので、

TreeMap<String, Koza> members = new TreeMap<String, Koza>();
// put entry to members
for (Koza koza : members.values()) {
    System.out.println("口座番号:" + koza.getNumber() + " 顧客氏名:" + koza.getName() + " 残高:" + koza.getAsset());
}

でいい。key も同時に欲しいなら

for (Map.Entry<String, Koza> entry: members.entrySet()) {
}

としておく。あと、どうでもいいけど、残高は asset より balance のほうがいいような(←ほんとうにどうでもいい)。

別解

口座番号で sort したいだけのようにも見えるのだが、それなら別に TreeMap なぞ必要ない。

class Koza implements Comparable<Koza> {
    // 略
    public int compareTo(Koza other) {
        return getNumber().compareTo(other.getNumber());
    }
}

としておけば、自力で sort なんか実装しなくても Collections.sort を使って、

ArrayList<Koza> members = new ArrayList<Koza>();
// add entry to members
Collections.sort(members);
for (Koza koza : members) {
    // 略
}

で良い。他にも TreeSet を使うという手も有る。