Javaで開発を行っていると、データベースから取得したデータと、手元で生成したデータを合わせて「1つの配列」として扱いたい場面がよくあります。
array1 + array2 といった簡単な演算子で結合することはできません。「新しい配列を用意してコピーする」という手順が必要になりますが、これを実現する方法はいくつか存在し、パフォーマンスや可読性によって使い分けることが重要です。
この記事では、Javaにおける配列結合の基本テクニックから、モダンな Stream API を使った方法、文字列としての結合、そして実務でよく使われる List を経由した方法まで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
1. 最も高速で基本的!System.arraycopyを使う方法
Javaで配列を結合する際、最も基本かつ処理速度が速いのが System.arraycopy メソッドを使用する方法です。
少し記述量は多くなりますが、プリミティブ型(int, byteなど)でも参照型(Stringなど)でも使え、パフォーマンスも最高クラスです。
2つのint配列を結合するサンプル
import java.util.Arrays;
public class ArrayCopyExample {
public static void main(String[] args) {
int[] array1 = { 1, 2, 3 };
int[] array2 = { 4, 5, 6 };
// 1. 新しい配列のサイズを計算して確保する
int[] result = new int[array1.length + array2.length];
// 2. array1 を result の先頭(0番目)からコピー
System.arraycopy(array1, 0, result, 0, array1.length);
// 3. array2 を result の array1の後ろ(array1.length番目)からコピー
System.arraycopy(array2, 0, result, array1.length, array2.length);
// 結果を表示
System.out.println("結合結果: " + Arrays.toString(result));
}
}
実行結果
結合結果: [1, 2, 3, 4, 5, 6]
上記のコードでは、まず結合後のサイズを持つ新しい配列 result を作成しています。
System.arraycopy(コピー元, 元の開始位置, コピー先, 先の開始位置, コピーする長さ) という引数指定で、前半に array1 を、後半に array2 をコピーしています。
一見面倒に見えますが、大量のデータを扱う場合や、byte配列などのバイナリ操作ではこの方法が最も確実です。
2. 今どきの書き方!Stream APIでスマートに結合する
Java 8以降で導入されたStream APIを使うと、より宣言的で読みやすいコードで配列を結合できます。
特に参照型(Stringやオブジェクト)の配列結合においては、非常にスマートな記述が可能です。
String配列を結合するサンプル
import java.util.Arrays;
import java.util.stream.Stream;
public class StreamConcatExample {
public static void main(String[] args) {
String[] array1 = { "Java", "Python" };
String[] array2 = { "C#", "Ruby" };
// Stream.concat を使って結合し、配列に戻す
String[] result = Stream.concat(Arrays.stream(array1), Arrays.stream(array2))
.toArray(String[]::new);
System.out.println("結合結果: " + Arrays.toString(result));
}
}
実行結果
結合結果: [Java, Python, C#, Ruby]
Arrays.stream() で配列をストリームに変換し、Stream.concat() で繋げた後、最後に toArray(String[]::new) で配列に戻しています。
3つ以上の配列を結合したい場合は、Stream.of(arr1, arr2, arr3).flatMap(Stream::of).toArray(...) のように flatMap を使うことで対応できます。
注意点として、プリミティブ型(int[] など)の場合、Stream ではなく IntStream を使う必要があります。
int[] result = IntStream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).toArray();
3. 配列の要素を繋げて「1つの文字列」にする方法
「配列と配列の結合」ではなく、「配列の中身を全部くっつけて、カンマ区切りの文字列にしたい」という検索意図も多いでしょう。
この場合は、String.join メソッドを使うのがベストプラクティスです。
String.join でカンマ区切り文字列を作成
public class StringJoinExample {
public static void main(String[] args) {
String[] fruits = { "Apple", "Banana", "Orange" };
// カンマ区切りで結合
String csv = String.join(",", fruits);
// 区切り文字なしで結合
String connected = String.join("", fruits);
System.out.println("CSV形式: " + csv);
System.out.println("連結: " + connected);
}
}
実行結果
CSV形式: Apple,Banana,Orange
連結: AppleBananaOrange
String.join(区切り文字, 配列) とするだけで、指定した区切り文字で要素を連結した文字列を取得できます。
以前のようにループを回して StringBuilder で連結する必要がなく、コードが非常にスッキリします。
4. 配列ではなくList(ArrayList)として結合する
要素の追加や削除が頻繁に行われる場合、そもそも「配列」ではなく「List(コレクション)」として扱う方が便利なケースが大半です。
配列を結合してリストに変換する方法も覚えておきましょう。
addAllメソッドを使った結合
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
public class ListJoinExample {
public static void main(String[] args) {
String[] array1 = { "A", "B" };
String[] array2 = { "C", "D" };
// 配列からリストを作成(変更可能なリストにするため new ArrayList でラップ)
List<String> list = new ArrayList<>();
// 配列の中身をリストに追加
Collections.addAll(list, array1);
Collections.addAll(list, array2);
System.out.println("Listの中身: " + list);
}
}
実行結果
Listの中身: [A, B, C, D]
Collections.addAll(リスト, 配列) を使うと、配列の中身を効率よくリストに追加できます。
最終的にどうしても配列に戻す必要がある場合は、list.toArray(new String[0]) で変換すればOKです。
5. byte配列の結合(バイナリデータの操作)
画像処理やネットワーク通信などで byte[] を結合したい場合も、基本的には System.arraycopy を使いますが、ByteArrayOutputStream を使うとより直感的に記述できます。
ByteArrayOutputStreamを使った結合
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class ByteJoinExample {
public static void main(String[] args) {
byte[] b1 = { 0x01, 0x02 };
byte[] b2 = { 0x03, 0x04 };
try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
output.write(b1);
output.write(b2);
byte[] result = output.toByteArray();
System.out.println("結合データ: " + Arrays.toString(result));
} catch (IOException e) {
e.printStackTrace();
}
}
}
実行結果
結合データ: [1, 2, 3, 4]
ストリームとして扱えるため、可変長のデータを次々と書き込んでいく場合に適しています。
例外処理が必要になりますが、コードの意図が明確になります。
Javaのスキルを活かして年収を上げる方法
以上、Javaで配列を結合する方法について解説してきました。
Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



