【Java入門シリーズ】第7章Javaの配列 〜複数のデータを効率よく扱う方法〜

【Java入門シリーズ】第7章: Javaの配列 〜複数のデータを効率よく扱う方法〜

プログラミングでは、複数のデータを効率的に扱う場面が頻繁にあります。配列は、そのような場合に非常に便利なデータ構造です。Javaにおける配列は、同じ型のデータをまとめて管理するための仕組みであり、要素数が固定されているため、メモリ効率が良いという特徴があります。この章では、Javaの配列に関する基礎知識から、配列の初期化、アクセス方法、そして多次元配列に至るまで、詳しく解説します。


7.1 配列とは?

配列とは、同じ型の複数のデータを1つにまとめて扱うことができるデータ構造です。配列を使うと、データを個別に扱うのではなく、1つの変数で複数のデータを効率的に管理できます。配列内の各データ(要素)はインデックスを使ってアクセスします。

7.1.1 配列の特徴

  • 固定長: 配列は作成時に要素の数(サイズ)を指定し、その後変更することはできません。
  • 同じデータ型: 配列に格納できるデータはすべて同じ型でなければなりません。
  • インデックス: 配列の要素には、0から始まるインデックスを使ってアクセスします。インデックス0は最初の要素、インデックス1は2番目の要素といった具合です。

7.1.2 配列のメリット

  • 効率的なメモリ管理: 配列は固定長であるため、メモリが効率的に管理されます。
  • 高速なアクセス: インデックスを使った要素へのアクセスは非常に高速です。
  • データの整理: 複数のデータを1つにまとめることで、プログラムの可読性や保守性が向上します。

7.2 配列の宣言と初期化

Javaで配列を使用するには、まず配列の宣言初期化を行う必要があります。配列の宣言は、配列の型を指定して変数を作成し、初期化によって配列のサイズを決定します。

7.2.1 配列の宣言

配列を宣言する基本構文は以下の通りです。

データ型[] 配列名;

例えば、整数型の配列を宣言する場合は次のようになります。

int[] numbers;

この宣言により、numbersという名前の整数型の配列が作成されますが、まだ配列のサイズは決まっていません。

7.2.2 配列の初期化

配列のサイズを指定して初期化を行うには、次のようにします。

int[] numbers = new int[5];

このコードは、5個の整数を格納できる配列を作成し、その配列にnumbersという名前を付けています。配列が作成された時点で、各要素はそのデータ型のデフォルト値で初期化されます。整数型の場合、デフォルト値は0です。

7.2.3 配列の宣言と初期化を同時に行う

配列の宣言と同時に初期値を設定することもできます。

int[] numbers = {1, 2, 3, 4, 5};

この例では、numbersという名前の配列を作成し、初期値として1, 2, 3, 4, 5を代入しています。要素数は5に自動的に決まります。

7.2.4 配列の初期化方法の例

public class Main {
public static void main(String[] args) {
// 配列の宣言とサイズの指定
int[] numbers = new int[3]; // 3つの要素を持つ配列
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

// 宣言と同時に初期化
int[] moreNumbers = {5, 10, 15, 20};
}
}

7.3 配列へのアクセスと操作

配列の各要素にはインデックスを使ってアクセスします。Javaの配列のインデックスは0から始まることを覚えておきましょう。

7.3.1 配列の要素にアクセスする

配列の要素にアクセスするには、次のようにインデックスを指定します。

int firstElement = numbers[0];  // 配列の最初の要素
int secondElement = numbers[1]; // 2番目の要素

7.3.2 配列の要素を変更する

配列の要素はインデックスを使って値を変更できます。

numbers[0] = 100;  // 最初の要素に新しい値を代入
numbers[2] = 300; // 3番目の要素に新しい値を代入

7.3.3 配列の長さを取得する

配列の長さ(要素数)は.lengthプロパティを使って取得できます。

int length = numbers.length;  // 配列の要素数を取得

7.3.4 配列の全要素にアクセスする

配列の全要素にアクセスするためには、forループ拡張forループ(for-each)を使います。

// 通常のforループ
for (int i = 0; i < numbers.length; i++) {
System.out.println("numbers[" + i + "] = " + numbers[i]);
}

// 拡張forループ
for (int num : numbers) {
System.out.println(num);
}

7.4 配列の利便性とユースケース

配列は様々な場面で役立つ強力なデータ構造です。ここでは、配列がどのようなユースケースで使われるのか、いくつかの具体例を挙げて紹介します。

7.4.1 ユースケース1: 成績管理システム

例えば、学生の試験の成績を記録する場合、配列を使うことで複数の成績をまとめて扱うことができます。

int[] scores = {80, 90, 70, 85, 95};
int total = 0;

for (int score : scores) {
total += score;
}

double average = (double) total / scores.length;
System.out.println("平均点: " + average);

7.4.2 ユースケース2: 数字の並べ替え

配列を使って、データを効率的に並べ替えることも可能です。Javaには、Arraysクラスのsortメソッドを使って配列を簡単にソートする機能があります。

import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[] numbers = {5, 3, 8, 1, 9, 2};
Arrays.sort(numbers); // 配列を昇順にソート

for (int num : numbers) {
System.out.println(num);
}
}
}

ソート後の結果は次の通りです。

1
2
3
5
8
9

7.4.3 ユースケース3: 配列の逆順

配列の要素を逆順にする場合も簡単に実装できます。

int[] numbers = {1, 2, 3, 4, 5};

// 配列の逆順にする
for (int i = 0; i < numbers.length / 2; i++) {
int temp = numbers[i];
numbers[i] = numbers[numbers.length - 1 - i];
numbers[numbers.length - 1 - i] = temp;
}

7.5 多次元配列

多次元配列は、配列の中にさらに配列を持つデータ構造です。最も一般的な多次元配列は二次元配列であり、行列のようにデータを整理して扱うことができます。

7.5.1 二次元配列の宣言と初期化

二次元配列を宣言する方法は、次の通りです。

int[][] matrix = new int[3][3];  // 3行3列の二次元配列

各要素には、それぞれ行と列のインデックスを使ってアクセスします。

matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;

7.5.2 二次元配列の宣言と同時に初期化する

二次元配列を宣言と同時に初期化する場合は、次のように書きます。

int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

7.5.3 二次元配列のループ処理

二次元配列の要素にアクセスするには、ネストされたループを使います。

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

7.6 配列の応用

配列は、他のデータ構造やアルゴリズムの基礎にもなります。ここでは、Javaにおける配列の応用例をいくつか紹介します。

7.6.1 メソッドに配列を渡す

配列をメソッドの引数として渡すことができます。

public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
printArray(numbers);
}

public static void printArray(int[] array) {
for (int num : array) {
System.out.println(num);
}
}
}

7.6.2 メソッドから配列を返す

メソッドから配列を返すことも可能です。

public class Main {
public static void main(String[] args) {
int[] numbers = createArray(5);
for (int num : numbers) {
System.out.println(num);
}
}

public static int[] createArray(int size) {
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = i + 1;
}
return array;
}
}

7.7 Javaの配列まとめ

この章では、Javaの配列について詳しく解説しました。配列は、同じ型のデータをまとめて管理するための強力なツールであり、データの整理やアクセスを効率化することができます。さらに、多次元配列を使えば、より複雑なデータ構造も扱えるようになります。配列は、プログラムを効率よく記述するために欠かせない基本的なデータ構造です。

次章では、Javaの例外処理について学び、プログラム中で発生するエラーにどのように対処するかを詳しく説明していきます。