記事内にはプロモーションが含まれています

【Java】配列を結合する4つの方法!System.arraycopyからStream API、文字列連結まで解説

【Java】配列を結合する4つの方法!System.arraycopyからStream API、文字列連結まで解説 Java

Javaで開発を行っていると、データベースから取得したデータと、手元で生成したデータを合わせて「1つの配列」として扱いたい場面がよくあります。

しかし、Javaの配列は固定長(サイズが決まっている)であるため、他のスクリプト言語のように array1 + array2 といった簡単な演算子で結合することはできません。

「新しい配列を用意してコピーする」という手順が必要になりますが、これを実現する方法はいくつか存在し、パフォーマンスや可読性によって使い分けることが重要です。

この記事では、Javaにおける配列結合の基本テクニックから、モダンな Stream API を使った方法、文字列としての結合、そして実務でよく使われる List を経由した方法まで、サンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • 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のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなJavaの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)