検索

キーワード


【Java】たくさんのデータをまとめよう! 配列の基本と使い方を解説!

  • 公開日:2020-09-25 12:55:10
  • 最終更新日:2021-01-25 17:27:40
【Java】たくさんのデータをまとめよう! 配列の基本と使い方を解説!



こんにちは。

駆け出しプログラマーの松倉です!

ここでは、配列の基本について紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです! 


関連記事リンク:【Java】配列のコピーの使い方を解説! Shallowコピーと Deepコピーの違いとは?【Java】配列と ArrayListの関係と違いについて解説! 配列同士のの比較方法とは?【Java】while文や for文などの反復処理(繰り返し構文)と breakや continueなどの反復制御の使い方!



配列

配列は Javaの最初のバージョンから用意されている古い機能であり、同じ型のデータをまとめて格納できます

一つの配列に確保される一つ一つの場所を「要素」と呼びます。

配列は複数の要素を持っているため、個々の要素が何番目の要素なのかを「インデックス」を使って管理します。

インデックスは数字の「0」から始まり、最大で「要素数 -1」の数になります。

要素の数(合計)を「要素数」といいます。

例えば 10個の値を保存するためには変数を 10個用意する必要がありますが、配列を使えば 10個の要素数を持つ 1つの配列に値を保存する事ができます


この記事では配列の基本について以下のことを紹介・解説を行います。

  • 一次元配列、多次元配列
  • 宣言
  • 初期化
  • 代入
  • 要素の取得(アクセス)
  • 要素数
  • 繰り返し処理
  • 代入



一次元配列と多次元配列

通常の場合は変数は 1つの値しか入れられませんが、配列では複数の値をまとめて入れることができます。

配列は「一次元配列」と「多次元配列」に分けることができます。

1列のものを一次元配列、2列以上は多次元配列と呼ばれます。

一次元配列同じ型の変数が一列に並んでおり、1列に並んだ配列の変数の値をインデックスで指定することで要素を引き出すことができます

多次元配列の一つである二次元配列の場合、横方向の並びとは別に縦方向の並びが 1つ加わります。

二次元配列の変数から値を取り出すためには、縦方向と横方向の 2つのインデックスで要素を引き出すことができます



宣言

配列を使用するには、最初に使用する配列を宣言しなくてはいけません。

配列の宣言は( [] )ブラケットを使用します。

変数の場合と同じように格納される値の「データ型」と配列を区別するための「配列変数名」を指定します。


配列の宣言の使い方

型名[] 配列変数名;
型名 配列変数名[];

文法的にはどちらでも許可されているのでどちらの書き方でも宣言が可能です。

※Javaの変数の宣言では全て「型名 変数名」という形に統一されているため「型名[] 配列変数名;」の記述が推奨されます。

これはあくまでも変数の宣言であり、配列を使う場合は値を格納する場所を必要な数だけ確保(初期化)する必要があります



初期化

配列も変数と同じように、変数を宣言する時に値を代入することで初期化することができます。


配列の変数は参照型変数です。

参照型変数は値そのものを保持しているのではなくアドレス(位置)をデータとして持っています。

基本データ型は宣言された変数に、直接値を入れることで初期化します。

しかし配列は参照型になるので、メモリ領域を確保してそのアドレスを変数に入れる事で初期化を行います

配列の初期化はプリミティブ型変数の初期化と違って、その配列で使う要素数を指定する必要があります。


宣言された配列に対して、必要な要素数を確保するためには「new演算子」を使用します。

new演算子では型名の後の「 [] 」の間に要素数を指定することで、必要な要素数を格納する領域を確保することができます。

配列の初期化にはいくつかの記述方法があります。


①要素数を指定する初期化の使い方

型名[] 配列変数名;
配列変数名 = new 型名[要素数];


配列の宣言と初期化は以下のようにまとめて記述することができます。

型名[] 配列変数名 = new 型名[要素数];

どちらの書式であっても動作に違いはありません。


配列の要素数を指定して初期化するサンプルコードを確認しましょう。

int[] a = new int[5];

上記の例では5つの数値を入れる配列が使用可能になります。


②配列に格納する値を指定する初期化の使い方

型名[] 配列変数名 = {1,2, ... };

配列の各要素に代入する初期値を「 {} 」の間に( , )カンマで区切って記述します。


配列に格納する値を指定する初期化を使ったサンプルコードを確認しましょう。

String[] n = { "ネズミ", "ウシ", "トラ", "ウサギ" };

配列の初期化は配列の要素数だけ値を指定する必要があります。

例えば 4個の要素が必要なとき 2つ要素だけ初期値を代入したい場合はこの方法は使えません。

このような場合は配列の宣言を行い、要素を確保してから一つ一つに初期値を代入していく必要があります。



要素の取得(アクセス)

配列の要素を取得することで宣言された配列の要素が正しく格納されているか確認することができます。

配列の変数から値を取得する場合、取得したい要素の入っている配列のインデックスを指定して要素を取得します

配列ではインデックスの数字が「0」から始まるということに注意しましょう。

要素の取得は一次元配列と多次元配列では方法が異なります。

例えば二次元配列の場合、変数から値を取り出すためには縦方向と横方向の 2つのインデックスを指定することで取得します。


一次元配列の要素の取得の使い方

配列変数名[配列番号];


二次元配列の要素の取得の使い方

配列変数名[行番号][列番号];


多次元配列の要素の取得の使い方

配列変数名[配列番号][配列番号]...[要素番号];


配列の取得をサンプルコードで確認しましょう。

public class Sample1 {
	public static void main(String[] args) {
		System.out.println("---季節---");
		String[] season = { "春", "夏", "秋", "冬" };
		System.out.println(season[0]);
		System.out.println(season[1]);
		System.out.println(season[2]);
		System.out.println(season[3]);

		System.out.println("---曜日---");
		String[][] week = { { "月曜", "火曜", "水曜", "木曜", "金曜" }, { "土曜", "日曜" } };
		System.out.println(week[0][0]);
		System.out.println(week[0][1]);
		System.out.println(week[0][2]);
		System.out.println(week[0][3]);
		System.out.println(week[0][4]);
		System.out.println(week[1][0]);
		System.out.println(week[1][1]);
	}
}


実行結果:

---季節---
春
夏
秋
冬
---曜日---
月曜
火曜
水曜
木曜
金曜
土曜
日曜

一次元配列では配列の中身の要素を 1つ、二次元配列では配列の中身の要素を縦方向と横方向の 2つインデックスを指定することで取得しています。



要素数

Javaでは配列の「要素数」を調べる方法が用意されています。

配列の要素数とは中に入れることができる要素の数のことです。

配列の要素数の取得は「.length」で取得することができます。


要素数の取得の使い方

配列変数名.length

調べたい配列の変数に( . )ドット + 「length」で配列の長さを取得することができます。


要素数を調べるサンプルコードを確認しましょう。

public class Sample2 {
	public static void main(String args[]) {
		String[] n = { "ネズミ", "ウシ", "トラ", "ウサギ" };

		System.out.println(n.length);
	}
}


実行結果:

4

簡単に配列の要素数を調べることが出来ました。



繰り返し処理

配列では for文のような「繰り返し処理」と組み合わせることで、効率的に配列に含まれる各要素を処理することが可能になります。


配列と繰り返し処理を組み合わせたサンプルコードを確認しましょう。

public class Sample3 {
	public static void main(String args[]) {
		String[] n = { "ネズミ", "ウシ", "トラ", "ウサギ" };

		for (int i = 0; i < n.length; i++) {
			System.out.println(n[i]);
		}
	}
}


実行結果:

ネズミ
ウシ
トラ
ウサギ

インデックスの値を繰り返し処理に使うことで配列に含まれる全ての要素を順に処理しています。

Sample3では配列には 4つの要素が用意されています。

要素数を取得することで、要素数の分だけの繰り返し処理が行われます。

要素数を取得することで配列の要素数が増減した場合でも、要素数によって処理が行われるため新たにコードを書き替える必要がありません。



代入

初期化された配列に対しては、各要素へ値を「代入」することができます。

配列の要素に代入する場合は、インデックスで要素の位置を指定して値を設定します

配列の要素は変数と同じように扱うことができます。


配列の代入の使い方

配列変数名[インデックス] =;

配列変数の後の( [] )ブラケットの間にインデックスを記述することで特定の要素を表すことができます。

インデックスを指定する場合、その配列の要素数の範囲内でなければなりません。

要素数の範囲は「0」から始まり、インデックスで指定した値の「要素数 -1」までとなります。

例えば 5個の要素を持つ配列を作成した場合、インデックスとして「0~4」までを使用して各要素を表すことができます。

5個の要素を持つ配列に対してインデックスに 10などの数値を指定すると「ArrayIndexOutOfBoundsException」という「実行時例外」が発生します。

配列を使う場合は事前に用意した要素の数しか利用ができないので注意しましょう。


配列の要素を新たに代入したサンプルコードを確認しましょう。

public class Sample4 {
	public static void main(String args[]) {
		System.out.println("---代入前---");
		String[] n = { "ネズミ", "ウシ", "トラ", "ウサギ" };

		for (int i = 0; i < n.length; i++) {
			System.out.println(n[i]);
		}

		System.out.println("---代入後---");
		n[0] = "タツ";
		n[1] = "ヘビ";
		n[2] = "ウマ";
		n[3] = "ヒツジ";

		for (int i = 0; i < n.length; i++) {
			System.out.println(n[i]);
		}
	}
}


実行結果:

---代入前---
ネズミ
ウシ
トラ
ウサギ
---代入後---
タツ
ヘビ
ウマ
ヒツジ

代入前と代入後で要素の値が変更されていることが確認出来ました。



まとめ

この記事では配列の基本について紹介しました。

配列はどのプログラミング言語でもコードを書く上で必要になる大きなテーマの一つです。

ぜひこの記事で配列の使い方を覚えましょう。

配列と繰り返し処理を組み合わせたコードを覚えられるようになると、とても便利なので合わせて覚えましょう。

多次元配列は多くの場合、二次元配列が多く使われます。

そのためこの記事ですぐに覚えずとも、実際に多次元配列を使うときに再度調べ直しても大丈夫だと思います。

配列について忘れたときはまたこの記事を読み返しに来てくださいね。

配列についてもっと詳しく学習したい方は別の記事で紹介しているので興味ある方は読みに来てください。


関連記事リンク:【Java】配列のコピーの使い方を解説! Shallowコピーと Deepコピーの違いとは?【Java】配列と ArrayListの関係と違いについて解説! 配列同士のの比較方法とは?【Java】while文や for文などの反復処理(繰り返し構文)と breakや continueなどの反復制御の使い方!

【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様