北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

ArrayListとperlの配列の違い

perlの配列は使いやすいです。以下のコードはなんの疑問もなく直感通りに動きます。

my @data = (1, 2, 3);
print $data[4],      "\n"; # 範囲を超えて参照してもよい
print scalar(@data), "\n"; # 範囲を超えて参照しても大きさはそのまま
print $data[-2],     "\n"; # 負値だと後ろから検索
$data[10] = 10;            # 範囲を超えて代入すると・・・
print scalar(@data), "\n"; # 大きさは拡張される

で、そのままjavaに移植してみます。

List<Integer> data = new ArrayList<Integer>(
    Arrays.<Integer>asList(1, 2, 3)
);
System.out.println(data.get(4));
System.out.println(data.size());
System.out.println(data.get(-2));
data.set(10, 10);
System.out.println(data.size());

コンパイルは通りますが、実行するとIndexOutOfBoundsException が出まくります。配列のサイズはプログラマが意識すべきですが、いちいちサイズをチェックしながら場合分けしてコーディングするのはいささか面倒です。

そんなわけで、楽するためにこのコードが動くようなListの実装を作ってみようと思います。


(時間がないので明日へ続く)