Java の基礎知識

【Javaプログラム】データをまとめて管理する配列とは?

Javaでプログラムを書く上で、配列の使い方を覚えると便利です。ただ、プログラムを初めて学ばれている方には、「配列」とは何か? イメージができない方もいるかも知れません。

この記事でわかること

  • 配列とは何か
  • Javaの配列の基本
  • Javaの配列の応用

配列とは?

変数と配列のイメージ

「配列」(Array)とは、複数の変数を連続してメモリー上に確保し、「添字」(Index)を指定することで、任意の位置から情報を取得したり更新したりできるものです。

変数は、特定の1つの値を記憶させる機能をもっていたことを思い出してください。

配列も「特定の値を記憶する」という点で、変数と同じ役割をもっています。ただし、配列は、同じ型の値を複数まとめて記憶するという便利な機能を備えています。

どんな場面で利用するの

配列はいろいろな場面で活躍します。

  • 大量のデータを記憶したい場合
  • データを効率的に集計したい場合

逆に配列を使わずに、1つ1つ変数を定義して行おうとすると、下記の問題が出てきます。

  • コードが冗長になる(≒ながったらしくなる)
  • 無用なオーバーヘッドが発生する(≒処理効率が落ちる)

Javaの配列の基本

それでは、Javaでの基本的な配列の定義の仕方を覚えましょう。

ココがポイント

配列のデータ型[] 変数名 = new 配列の型[配列の要素数];

配列の定義は、変数を定義する時と似ています。なぜなら、配列も変数の一種だからです。そのため、配列のことを配列変数ともいいます。

変数の定義と異なることは、「半角大かっこ」([])に囲まれた中に、「配列の要素数」を指定することです。配列の要素数は、配列のサイズとか、配列の大きさなどともいいます。

また、配列の型を前方に明示する場合、型の後ろに半角大かっこを続けます。この時に指定できる要素数の下限は0です。

対して、上限は環境(実行しているPCやJavaの設定)によります。場合によっては1千個どころか、1万個・100万個の変数を定義できる場合もあります。

もしも配列という仕組みがない場合、数百万個の変数名を直に書くことになります。それに、数百万個の被りのない変数名を考えるなんて無駄です。

このように「配列を覚えると、大分楽できるんだな」ということが、実感して頂けるのではないでしょうか。

配列へのアクセスと添字

次に、定義した配列へのアクセスの仕方を覚えましょう。

ここでいうアクセスの意味とは、下記を指しています。

アクセスの意味

  • 配列の任意の要素に値を設定する
  • 配列の任意の要素の値を取得する

これは特に難しいことはありません。

この例は、3人分の得点をscoresという配列の0番目と1番目と2番目に設定しています。続けて、それぞれの要素をsumという変数に加算しています。この半角大かっこで囲まれた「[0]や[1]や[2]」が添字です。

配列の添字の範囲

では問題です。

3人の得点を記憶させるために、以下のように定義しました。これはうまくいくでしょうか?

scores[1] = 30;
scores[2] = 50;
scores[3] = 70;

この例では、「scores[3] = 70;」の部分で実行時エラーが起こります。

なぜならJavaの配列は「ゼロインデックス」と呼ばれており、添字は以下のルールになっているからです。

添え字のルール

添字の最初は0から始まる
添字の最後は「要素数 - 1」まで指定できる

もっと詳しく

配列を宣言し、3つの配列要素を確保すると、各要素は添字0~2を使って出力します。要素数3のscoresの場合、添字として有効な範囲が「0から2まで」となります。

var scores = new int[3]
■代入       ■出力
scores[0] = 30;   System.out.println(scores[0]); ⇒  ゼロインデックス
scores[1] = 50;   System.out.println(scores[1]);
scores[2] = 70;   System.out.println(scores[2]);

ココに注意

配列の要素数をこえる配列要素に値を代入することは出来ません。

var scores = new int[3]
scores[0] = 30;
scores[1] = 50;
scores[2] = 70;
scores[3] = 90; ⇒ 代入不可!

配列の初期化

Javaでは、配列を定義しただけの状態では、「ゼロクリア」もしくは「nullクリア」されることが決まっています。これを初期化といいます。

  • プリミティブ型(int/char/double/float…etc)はゼロクリアされる
  • オブジェクト型(String, Object…etc)はnullクリアされる

これは実行結果をみると簡単でしょう。

Javaの配列は、定義した瞬間に自動的に初期化してくれるため便利です。

配列の応用:任意値での初期化

さて、応用として10人分の成績を定義する例を考えてみましょう。これを実直に10回配列に代入するのは、とても面倒です。

人によっては「コピペすればいいんでしょ?」なんて思うかも知れませんが、プログラムを書く上ではコードのコピペは避けるべきと言われています。

そのためJavaでは、できるだけ楽に配列の初期化ができるように、以下のような定義が可能になっています。

ここでの配列の定義の仕方は、基本で表したものとは異なっています。

ココがポイント

配列の型[]  変数名 = new 配列の型[]{要素1, 要素2, …};

この記述を行うと、半角波括弧の中に書いた要素が、配列の0番目から順々に定義されます。

この時の配列の要素数は、実際に書いた要素の個数が採用されます。

今回の例では10個の点数を書いているので、要素数として10が指定されており、「0から9」の添字が使えます。

まとめ

配列はプログラムを書く上で重要です。配列をうまく理解し、活用して、楽ができるようにしましょう。

最後に、今回の配列のポイントをおさらいします。

ポイント

  • 「配列」とは、変数を連続してメモリー上に確保し「添字」(Index)を指定し任意の位置から情報を取得したり更新したりできるもの
  • 配列は「大量のデータを記憶したい場合」や「データを効率的に集計したい場合」に用いる
  • Javaの配列は以下の4パターンの初期化ができる
    • var 変数名 = new 配列の型[配列の要素数]; (java10以上)
    • var 変数名 = new 配列の型[]{要素1, …, 最後の要素}; (java10以上)
    • 配列の型[] 変数名 = new 配列の型[配列の要素数];
    • 配列の型[] 変数名 = new 配列の型[]{要素1, …, 最後の要素};
    • Javaの配列は添字として「0から要素数-1」まで指定できる
    • Javaの配列は、初期化の際に要素を与えなければ、ゼロクリア/nullクリアされる

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Java の基礎知識