【ITニュース解説】【ポケモン×Java】知識編 配列#3 〜配列を完全攻略! -二次元配列-~
2025年09月29日に「Qiita」が公開したITニュース「【ポケモン×Java】知識編 配列#3 〜配列を完全攻略! -二次元配列-~」について初心者にもわかりやすく解説しています。
ITニュース概要
一次元配列の次に二次元配列について解説する。二次元配列は、表やマップのようなデータを扱うのに適している。さらに応用として、行ごとに列数が異なるジャグ配列も学ぶことができる。これらはプログラミングで複雑なデータを効率的に管理するための基本となる。
ITニュース解説
プログラミングにおけるデータ管理は、システムの根幹をなす非常に重要な要素である。これまでの学習で、一次元配列を用いて一列に並んだデータを扱う方法を理解したことだろう。例えば、名前のリストや商品の価格リストなど、シンプルな連続データを管理する際には一次元配列が非常に有効だ。しかし、世の中にはもっと複雑な構造を持つデータが数多く存在する。例えば、ゲームのマップ情報のように縦と横の広がりを持つデータや、顧客情報のように複数の項目が関連付けられた表形式のデータなど、一次元配列だけでは表現しきれない情報が多数存在する。このような、いわば「表」のようなデータを扱う際にこそ、二次元配列の出番となる。
二次元配列は、文字通りデータが行と列の二つの次元に沿って配置される構造を持つ。これはまるで、エクセルのシートや方眼紙のようなものだと考えるとイメージしやすいだろう。プログラミングの視点から見ると、二次元配列は「配列の配列」と表現できる。つまり、複数の一次元配列がまとめて格納された集合体として機能する。Java言語を例にとると、int[][] array; のように記述することで、整数型(int)のデータを格納する二次元配列を宣言できる。この宣言だけでは、まだメモリ上にデータのための具体的な領域は確保されていない。次に array = new int[3][4]; のように記述することで、実際にデータを格納するための領域を確保する。この例では、3つの行と4つの列を持つ、合計12個の整数を格納できる二次元配列が作成される。Javaの数値型配列の要素は、特に初期値を設定しない限りデフォルトで0が割り当てられ、真偽値(boolean)ならばfalse、文字列やその他のオブジェクトなどの参照型ならばnullが初期値となる。また、宣言と同時に具体的な値を設定することも可能で、int[][] array = {{1, 2, 3}, {4, 5, 6}}; のように記述すれば、一行目に1, 2, 3、二行目に4, 5, 6というデータを持つ二次元配列を一度に作成できる。
二次元配列に格納された個々のデータにアクセスするには、行のインデックスと列のインデックス、この二つの情報を指定する必要がある。例えば、array[0][0] は一番左上、つまり0行目0列目の要素を指す。一次元配列と同様に、インデックスは0から始まることを忘れてはならない。array[1][2] と記述すれば、1行目2列目の要素にアクセスできる。このように、特定の座標を指定することで、データの読み出しや新しい値の書き込みを行うことができる。例えば、マップの特定の座標にキャラクターの位置情報を格納したり、あるマスが通行可能かどうかを示すフラグを設定したりといった応用が考えられる。二次元配列のすべての要素を効率的に処理したい場合には、二重ループ(ネストされたループ)を使うのが一般的である。外側のループで行を一つずつ繰り返し処理し、その内側のループで、現在処理している行の各列を順に処理していく。Javaでは、array.length を使うことで二次元配列の行数(一次元配列の数)を取得でき、array[i].length を使うことでi番目の行の列数(その一次元配列の要素数)を取得できる。これにより、配列のサイズが事前に不明な場合でも、汎用的にすべての要素を処理するコードを記述することが可能となる。
さらに高度な配列の形として、「ジャグ配列(不規則配列)」という概念がある。これも二次元配列の一種だが、通常の二次元配列がすべての行で同じ数の列を持つ「長方形」や「正方形」の形をしているのに対し、ジャグ配列は各行の列数が異なっていてもよいという特徴を持つ。これにより、より柔軟で、メモリを効率的に利用できるデータ構造を表現することが可能になる。例えば、あるカテゴリーのデータは項目が多いが、別のカテゴリーのデータは項目が少ないといった場合に、ジャグ配列を使えば無駄な領域を作ることなくデータを管理できる。ジャグ配列を宣言しインスタンスを生成する際には、まず int[][] jaggedArray = new int[3][]; のように、行数だけを指定して列数は空のままにする。その後、jaggedArray[0] = new int[5];、jaggedArray[1] = new int[2];、jaggedArray[2] = new int[4]; のように、各行に対して異なる列数を持つ一次元配列を個別に割り当てる。これにより、0行目は5列、1行目は2列、2行目は4列といった、それぞれ異なる長さの行を持つジャグ配列が完成する。ジャグ配列の要素へのアクセス方法は通常の二次元配列と同じ jaggedArray[行インデックス][列インデックス] だが、ループ処理を行う際には jaggedArray[i].length を使って、現在処理している行の実際の列数を取得することが特に重要となる。これを怠ると、存在しない列にアクセスしようとしてプログラムが予期せぬエラーを起こす可能性があるからだ。
二次元配列やジャグ配列の概念と使い方を習得することは、システムエンジニアを目指す上で非常に価値のあるスキルとなる。表形式のデータベース、ゲーム開発におけるマップ、画像処理におけるピクセルデータ、科学技術計算における行列など、多くの複雑なデータをこれらの配列構造を使って効率的に表現し、操作することが可能になる。一次元配列では表現しきれなかった多次元の情報を、適切かつ柔軟に管理できるようになることで、より高度で実用的なソフトウェアの設計・実装能力が大きく向上するだろう。これらの配列の基本をしっかりと理解し、さまざまな現実世界のデータの表現に応用できるようになることは、プログラミング学習における次の重要な一歩である。