エンジニアのひよこ_level10

【毎日更新!】新卒4年目エンジニアブログです!

【Java】インスタンスを初期化してから変更するなら再生成しよう【846日目】

初期化を繰り返した

自分が書いたプログラムに、以下のようなコードがありました。

        for (int i = 0; i < max_row; i++) {
            for (int j = 0; j < max_column; j++) {
                row.add("{r:" + i + " c:" + j + "}");
            }
            table.add((ArrayList<String>) row.clone());
            row.clear();
        }
1. rowを変更
2. rowをcloneして代入
3. 初期化

ってループです。

これやるくらいなら・・・ってお話

変更後のコード

        for (int i = 0; i < max_row; i++) {
            ArrayList<String> row = new ArrayList<String>();
            for (int j = 0; j < max_column; j++) {
                row.add("{r:" + i + " c:" + j + "}");
            }
            table.add(row);
        }
1. rowを生成
2. 代入

このループに変わりました。

覚えておくと良さそうなこと

そもそもcloneを使わなきゃいけないことに疑問を持とうってお話

今回のケースは、『初期化して値を入れる』という発想は、『今までのことをなかったことにする』という発想に置き換えられます。
『なかったことにする』なら、『捨てて新しく用意する』と考えれば、同じ状況に陥っても、この書き方が思いつくと思いますφ(・

JJUGの皆さんいろいろアドバイスありがとうございます・・・!

書いたコード

github.com