今回の記事では、Javaの「配列」について解説をしていきたいと思います。
配列とは何か?基本的な使い方や応用方法について、詳しく説明していきたいと思いますので、ぜひ最後まで読んでみてくださいね!
Javaの配列とは?
Javaにおける配列とは、同じ型の複数の値を一つの塊として扱うことができる変数のことを指します。
【配列の例】
arr = {10, 20, 30, 40 ,50}
通常の変数であれば何十個と宣言しなければいけないようなケースでも、配列であれば一回の宣言でデータをまとめて格納することができます。
そのため、どのプログラミング言語でも必ず用意されているほどに重要な仕様でもあります。
Javaの配列の基本を解説
まずは、配列を宣言する方法や値を代入する方法など、基礎的な部分について解説をしていきたいと思います。
配列の宣言
配列を使用するには、変数の宣言と要素の確保が必要になります。以下のように記述して変数の宣言を行います。
【基本構文】
型名[] 配列名; //変数の宣言
型名 配列名[] = new 型名[要素数]; //要素の確保
配列は、 「new」 を使用して要素を確保することで、初めて使用できるようになります。
この二つの文は、一行にまとめることもできます。
型名[] 配列名 = new 型名[要素数];
例えば、int型の値を3つ格納できる配列を宣言したい場合は、以下のように記述します。
【サンプルコード】
int arr[] = new int[3];
配列の要素への代入と参照
配列の宣言と要素の確保が完了すると、値を代入することができるようになります。
配列の各要素を参照する際は、以下のように記述します。
【基本構文】
配列名[インデックス番号]
インデックス番号とは、要素の確保時に自動で割り振られる、いわゆるアクセスキーのことです。番号は0から始まって、要素の数だけ1ずつ順に上がっていきます。
以下のサンプルコードで、実際に値を代入する方法について見ていきましょう。
【サンプルコード】
public class sampleArr1 {
public static void main(String[] args) {
int arr[] = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
【実行結果】
10
20
30
配列の要素に値を代入したり、別の変数に要素のデータをコピーする場合は、このようにインデックス番号を指定して要素にアクセスします。
配列の初期化
配列では、宣言と同時に値を代入して初期化することもできます。その場合は、以下のように記述をして初期化します。
【基本構文】
型名 配列名[] = {値1, 値2, ... };
以下がそのサンプルコードです。
【サンプルコード】
public class sampleArr2 {
public static void main(String[] args) {
String arr[] = { "A", "B", "C", "D", "E" };
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
【実行結果】
A
B
C
D
E
また、全ての要素を同じ値で埋めても構わない場合には、Arraysクラスのfillメソッドを使って初期化を行うのも方法の一つです。
ただし、使用の際には「java.util.Arrays」のインポートが必要です。
【サンプルコード】
import java.util.Arrays;
public class sampleArray3 {
public static void main(String[] args) {
int arr[] = new int[5];
Arrays.fill(arr, 10);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
}
}
【実行結果】
10
10
10
10
10
Javaの配列の応用を解説
続いて、配列の様々な応用方法について解説していきます。
lengthプロパティで配列の要素数を取得
配列には、要素数を取得することができる「length」というフィールドが存在します。
以下のサンプルコードで、実際の動きを見てみましょう。
【サンプルコード】
public class sampleLength {
public static void main(String[] args) {
String[] arr = new String[10];
System.out.println("配列の要素数:" + arr.length);
}
}
【実行結果】
配列の要素数:10
このように、lengthフィールドを使って要素数を取得することができます。
配列に要素を追加する
Javaの配列には、後から要素を直接追加する方法が用意されていません。そのため、別の配列に値をコピーするなどの方法で追加する必要があります。
今回は、要素数を大きくした配列を別で用意し、その配列にSystemクラスのarraycopyメソッドを使って値をコピーする方法を紹介します。
arraycopyメソッドの基本構文は、次の通りです。
【基本構文】
arraycopy(コピー元配列, コピー元の開始位置, コピー先配列, コピー先の開始位置, コピーする要素数)
以下が、メソッドを使用して要素を追加する具体例です。
【サンプルコード】
public class sampleArraycopy {
public static void main(String[] args) {
int[] numArr = { 1, 2, 3, 4, 5 }; // 元の配列
int[] result = new int[10]; // 要素数を追加した配列を用意
// 配列resultに値をコピー
System.arraycopy(numArr, 0, result, 0, 5);
// 格納したデータを表示
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + ", ");
}
}
}
【実行結果】
1, 2, 3, 4, 5, 0, 0, 0, 0, 0,
メソッドを使用して、元の配列のデータをコピーすることができました。
値を代入していない数値型の配列の初期値は0になるので、増えた分の要素に関しては0が表示されています。
配列の要素をコピーする
配列の要素をコピーする場合、先ほど紹介したarraycopyメソッドの他に、「clone」メソッドも用意されています。
具体的な使用方法について、以下のサンプルコードで見ていきましょう。
【サンプルコード】
public class sampleClone {
public static void main(String[] args) {
int[] numArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 元の配列
int[] result = numArr.clone(); // 配列をコピー
// 配列resultを表示
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + ", ");
}
}
}
【実行結果】
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
cloneメソッドは指定した配列の要素全てをコピーするメソッドのため、一部の要素だけをコピーしたい場合には先ほど紹介したarraycopyメソッドを使用します。
【サンプルコード】
public class sampleArraycopy2 {
public static void main(String[] args) {
int[] numArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 元の配列
int[] result = new int[10]; // コピー先の配列
System.arraycopy(numArr, 5, result, 5, 5);
// 配列resultを表示
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + ", ");
}
}
}
【実行結果】
0, 0, 0, 0, 0, 6, 7, 8, 9, 10,
配列の要素をソートする
配列内の要素の順番を並び替えたい場合は、Arraysクラスのsortメソッドを使用します。
その際には、fillメソッドと同様に「java.util.Arrays」のインポートが必要です。
【サンプルコード】
import java.util.Arrays;
public class sampleSort {
public static void main(String[] args) {
int[] numArr = { 10, 30, 5, 1, 20, 15 };
Arrays.sort(numArr); // 要素を並び替え
for (int i = 0; i < numArr.length; i++) {
System.out.print(numArr[i] + ", ");
}
}
}
【実行結果】
1, 5, 10, 15, 20, 30,
sortメソッドを使用して、配列内の要素を並び替えることができました。
ただし、並び替えられる順番は昇順のみになります。
複数の配列を結合する
先ほど紹介したarraycopyメソッドを使用して、別々の配列同士を結合する方法を紹介します。
【サンプルコード】
public class sampleArraycopy3 {
public static void main(String[] args) {
int[] numArr1 = { 10, 15, 20 };
int[] numArr2 = { 25, 30, 35 };
// 配列同士の要素数を合計
int len = numArr1.length + numArr2.length;
// 合計値の要素数でコピー先の配列を作成
int[] result = new int[len];
// numArr1を配列にコピー
System.arraycopy(numArr1, 0, result, 0, numArr1.length);
// numArr2を配列にコピー
System.arraycopy(numArr2, 0, result, numArr1.length, numArr2.length);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + ", ");
}
}
}
【実行結果】
10, 15, 20, 25, 30, 35,
lengthフィールドで各配列の要素数を使用することで、コピー先の配列の要素数や開始位置の取得を自動で行うことができます。
【応用】配列の中に配列を格納する多次元配列
配列の中身は、配列の中に別の配列を格納する多次元配列というものが存在します。
例えば、以下のような形式を指します。
【多次元配列の例】
{ {1,2,3}, {4,5,6} };
配列の中にあるデータを入れるための箱が、さらに別の箱でいくつかのまとまりに分けられているようなイメージです。
例のような多次元配列を宣言する場合は、次のように記述します。
【サンプルコード】
int[][] arr = new int[2][3]
上記の例は、配列の中に別の配列が1つだけ入っているので、いわゆる「2次元配列」になります。内部の配列の要素を配列にすることで、配列の次元数をさらに増やすこともできます。
多次元配列は配列内で要素がさらに別のまとまりに分かれるため、通常の配列よりも扱いが複雑になりがちです。まずは、通常の配列の扱いに慣れてから、多次元配列の使用に慣れていくといいでしょう。
まとめ
いかがでしたでしょうか?今回は、配列について解説をしてきました。
Javaを扱う上で、配列は必須とも言える機能の一つですので、ぜひマスターできるように頑張ってみてくださいね!
Javaの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、Javaに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。