【入門】Javaの配列とは?使い方の基本から応用までわかりやすく解説!

プログラミング言語の中でも、とくに高い人気と知名度を誇るJava。その学習過程で必ず出会う概念が「配列」です。
同じ型の値を連続して扱うこの仕組みを理解するかしないかで、コードの可読性や保守性が大きく変わります。とはいえ、初心者にとってはすこし理解に時間がかかってしまうものです。
本記事では、そんなJavaの配列について基礎から応用まで、実例を交えつつやさしく解説していきます。配列初心者の方はもちろん、学習に行き詰まっている方も、ぜひ参考にしてほしいと思います。
そもそも「配列」とは?

プログラミングにおける「配列」というのは、同じ型の複数の値を連続した領域にまとめて管理するためのデータ構造のことです。
たとえば「学生のテスト点数」や「商品リスト」など、関連性のあるデータを一括して扱えるのが特徴となります。
配列では各要素に添字(インデックス)を使ってアクセスし、要素数が固定される一方、取り回しがシンプルで保守もしやすいメリットがあります。
なお、「配列」についてより詳しく知りたい方は、以下の記事が参考になるので、ぜひご一読ください。
「なんか今の仕事合わないな・・・」
「IT業界に転職してみたいなぁ・・・」
という方、DMMが運営する「WEBCAMP エンジニア転職」をご検討してみてはいかがですか?

「WEBCAMP エンジニア転職」では最短12週間でITエンジニアを目指すことが可能です!
WEBCAMPの卒業生は転職後に年収もUP!(例:年収250万円→500万円)
しかも今なら受講料の最大70%が給付金として支給されます。
DMM WEBCAMPは経済産業省・厚生労働省が認定した専門実践教育訓練給付金制度の対象です
Java入門:配列の基本【宣言】

Javaで配列を使うには、まず要素の型と変数名を宣言し、次にnew演算子で領域を確保します。
たとえば「int[] scores;」と書いた後、「scores = new int[5];」で要素数5の配列を生成できます。
上記を短縮したい場合は、「int[] scores = new int[5];」のように一行で書くことも可能です。
要素の型はint以外にもStringや独自クラスなどが指定でき、配列名は任意です。
例:
int[] scores; // 配列の宣言
scores = new int[5]; // 要素数5の配列を生成
int[] ages = new int[3]; // 宣言と生成を同時に行う
宣言した配列を各要素へ代入する方法
宣言・生成された配列に値を代入する際は、インデックスを使って要素を指定します。
インデックスは0から始まり、たとえば「scores[0] = 100;」と書くと先頭の要素に100を代入するといった形です。
複数の要素へ一括で値を代入する(インデックス0〜100それぞれに5を追加する、など)場合には「繰り返し処理」が便利です。
その場合、for文などで0から配列の長さ−1までを、順番に巡回して設定することが可能です。
こうした方法によって、多数のデータを効率的に初期化・更新できる点が配列の大きなメリットです。
例:
// 通常の代入方法
scores[0] = 100;
scores[1] = 90;
scores[2] = 80;
// 繰り返し処理で代入する場合
for(int i = 0; i < scores.length; i++) {
scores[i] = i * 10; // インデックス0~9まで代入
}
Java入門:配列の基本【初期化】

Javaで配列を初期化する方法はいくつか存在します。
代表的なのは、new演算子で領域を確保した直後に要素へ値を代入する方法です。
また、配列宣言と同時に中括弧{}を使って初期値をまとめて設定する方法もあり、こちらは要素数が自動的に計算されるメリットがあります。
例:
// new演算子で領域を確保した後、値を代入
int[] numbers1 = new int[3];
numbers1[0] = 10;
numbers1[1] = 20;
numbers1[2] = 30;
// 宣言と同時に初期化
int[] numbers2 = {100, 200, 300};
Java入門:配列の基本【二次元配列・多次元配列】

二次元配列や多次元配列は、要素がさらに配列を持つ構造になっており、表形式や多次元データを扱う際に重宝します。
Javaでは
型[][] 変数名 = new 型[行数][列数]
といった書式で宣言し、インデックスを二つ以上指定して要素にアクセスします。
多次元になるほど添字が増えて厄介に感じますが、基本的な仕組みはこれまでと同じです。
行列演算や座標系の管理など、データを立体的に整理したいときに大いに役立つので、しっかり覚えておきましょう。
例:
int[][] matrix = new int[2][3]; // 二次元配列を生成
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
int[][] table = {
{10, 20},
{30, 40},
{50, 60}
}; // 初期化をまとめて指定
上記を実行してもコンソールには何も表示されませんが、
matrix = [ [1, 2, 3], [0, 0, 0] ]
table = [ [10, 20], [30, 40], [50, 60] ]
という状態になります。
Java入門:配列の応用

Javaの配列は「length」や「clone」といった変数やメソッドを活用することで、より便利に扱うことが可能になります。
この章ではJavaの配列の応用として、よく使われる変数やメソッドを紹介します。
①要素数の取得(length)
Javaの配列は、オブジェクトとして生成されると同時に、その要素数が固定されます。
要素数を確認するには「配列変数.length」を使えば簡単に取得できます。
要素数が正しく取得できれば、for文や拡張for文で範囲外のアクセスを防止できるだけでなく、配列サイズに応じて動的に処理を変えることも容易になります。
例:
int[] scores = {85, 90, 75};
System.out.println("配列の要素数: " + scores.length);
for(int i = 0; i < scores.length; i++) {
System.out.println("scores[" + i + "] = " + scores[i]);
}
実行結果:
配列の要素数: 3
scores[0] = 85
scores[1] = 90
scores[2] = 75
②要素の追加・結合(System.arraycopy)
Javaの標準機能である「System.arraycopy」を使うと、特定の位置から別の位置へ要素をまとめてコピーできます。
配列は要素数が固定なので、新たに大きな配列を用意してから古い配列をコピーし、追加部分を埋めるといった応用がよく行われます。
引数には
- コピー元
- コピー開始位置
- コピー先
- コピー先開始位置
- コピーする要素数
を指定します。
類似のメソッドと比較して処理速度も速いとされており、大量データを扱うシーンで便利です。
例:
int[] original = {1, 2, 3};
int[] newArray = new int[5];
// originalの要素をnewArrayへコピー
System.arraycopy(original, 0, newArray, 0, original.length);
// 追加部分を手動で設定
newArray[3] = 4;
newArray[4] = 5;
上記を実行すると、newArrayの内容は、以下のようになります。
[1, 2, 3, 4, 5]
③要素のコピー(clone)
配列がもつ「clone」メソッドを利用すると、元の配列と同じ要素を持つ新しい配列を作成できます。
単純な代入(=)では参照先を共有するため、元の配列を変更するとコピー先も影響を受ける可能性があります。
そこで、cloneを使えば要素が複製されるので、独立した新たな配列として扱えます。
要素自体も完全に別オブジェクトとしてコピーしたい場合は、個別に複製処理を書く必要があります。
例:
int[] original = {10, 20, 30};
int[] copied = original.clone();
// originalとは別の配列参照になる
copied[0] = 999;
System.out.println(original[0]); // 10
System.out.println(copied[0]); // 999
実行結果:
10
999
④要素のソート(Arrays.sort)
配列の要素を整列させたい場合、「java.util.Arrays」のstaticメソッド「sort」が便利です。
指定した配列に対して昇順にソートを行ってくれるもので、数値だけでなく文字列やオブジェクト型でも、自然順序付けが定義されていれば適用可能です。
ソート後はインデックス順に小さい値やアルファベット順、辞書順でアクセスできるため、検索や集計などの操作を効率化できます。
大量データの高速な整列の際によく用いられています。
例:
int[] data = {50, 10, 30, 20, 40};
java.util.Arrays.sort(data);
for(int num : data) {
System.out.print(num + " "); // 10 20 30 40 50
}
実行結果:
10 20 30 40 50
Javaを学ぶのはおすすめ?

Javaを学ぶのは非常におすすめといえます。
Javaは業界を問わず根強い需要があり、大規模システムからAndroidアプリ開発まで幅広い分野で採用されているためです。
とくに企業の業務システムでは長年Javaがメインで使われてきた経緯があり、今後も継続的に保守・運用が必要とされるため、エンジニアの需要は途切れにくいでしょう。
また習得にはある程度の基礎知識が求められる一方、豊富な学習リソースや企業による教育体制が整っているケースも多く、初学者でもステップアップしやすい環境が整っています。
総合的に見て、長く使われ続けている信頼性・汎用性の高さから、プログラミング言語の入門としてもキャリアアップの手段としても、Javaを学ぶことは十分におすすめできます。
Javaの特徴・向いている開発
JavaはJVM(Java Virtual Machine)上で動作することで、OSや環境に依存しにくい特性を持っています。
開発効率や保守性が高いことから、広く普及したフレームワーク(Springなど)と豊富なライブラリ群が存在するため、大規模開発に向いています。
たとえばWebアプリケーションサーバや企業の基幹システム、Androidアプリなどにも幅広く採用されています。
しっかりとした設計が求められるプロジェクトほど、その信頼性が重宝されるため、大規模・長期のプロジェクトなどであるほどJavaが選ばれる傾向にあります。
Javaエンジニアの働き方・労働環境
Javaは需要も汎用性も非常に高いことから、Javaエンジニアの働き方は多岐にわたります。
たとえば
- 大手企業の情報システム部門
- SIerでの常駐開発
- Web系企業でのアプリケーション開発
- フリーランスとして複数案件をかけ持つ
など、さまざまなキャリアパスが存在します。
企業やプロジェクトによっては保守・運用がメインの場合もあれば、新規開発を積極的に行うチームもあり、働き方の幅が広いのが特徴です。
さらにJavaは既存システムの保守や機能追加の依頼が多い一方、クラウドやコンテナ技術との組み合わせで新しいサービスを作り上げる機会も増えています。
ニーズが幅広いことから比較的安定した需要を享受しやすく、案件が途切れにくいのも魅力のひとつです。
Javaの習得難易度
Javaは静的型付け言語であり、クラスやオブジェクト指向の概念を正しく理解する必要があるため、初学者にはややハードルが高く感じられるかもしれません。
しかしながら構文自体は比較的読み書きしやすく、業界での使用実績が豊富なため、日本語のドキュメントや学習サイト、書籍も充実しています。
初心者向けから上級者向けまで多様なリソースがあるので、継続的な学習を進めれば習得は十分可能です。
オブジェクト指向の考え方を一度マスターすれば、C#など同じパラダイムの言語へもスムーズに移行できるので、長期的なエンジニアとしてのキャリアを見据えても大いにプラスになるでしょう。
Javaを学べるおすすめのスクール

業務システムやWebアプリ開発など、幅広い分野で需要の絶えないJavaを基礎から体系的に学びたい方には、DMM WEBCAMPの「Javaコース」がおすすめです。
本コースはオブジェクト指向やJavaの基本文法に加え、Webアプリケーション開発に欠かせないフレームワーク(Spring Boot)まで網羅しており、週2回のマンツーマンメンタリングや、現役エンジニアへの「質問 | 課題レビューサポート」がいつでも利用でき、初心者でも挫折しにくい学習環境が整っています。
さらに経済産業省が実施する「リスキリングを通じたキャリアアップ支援事業」に認定されており、受講後に決められた条件を満たすことで受講費用の最大70%(最大213,054円)がキャッシュバックされます。
短期集中でスキルを伸ばしたい方には返金保証制度・延長プランも用意されており、自分のライフスタイルに合わせて学習期間を調整できます。
安定した需要を誇るJavaの知識を習得し、エンジニアとしてキャリアアップを目指したい方はもちろん、「Javaの学習自体しようか否か迷っている」という方でも、お気軽に無料相談をご活用ください。
この記事のまとめ:Java配列のポイント
ここまでJavaの配列について、基本的な宣言や初期化方法から、要素数の取得、追加・コピー、ソートなど解説してきました。
配列は同一型のデータを一括管理でき、コードの簡潔化と保守性向上に大きく寄与する重要な要素です。
配列は現場でも必ず使われる重要な技術なので、ぜひマスターして、より効率的な開発を行っていきましょう。