Java Programming

Javaにおける効率的な配列連結

Spread the love

Javaには、配列の連結操作が組み込まれていません。配列はサイズが固定されているため、2つの配列を結合するには、より大きな新しい配列を作成し、要素をコピーする必要があります。この記事では、これを実現するための3つの効果的な方法について説明します。

目次

Apache Commons LangのaddAll()の使用

Apache Commons Langライブラリは、そのArrayUtilsクラス内に便利なaddAll()メソッドを提供しています。これにより、配列の連結が大幅に簡素化されます。 まず、プロジェクトに依存関係を追加します(例:Mavenを使用)。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version> <!-- 最新バージョンを使用 -->
</dependency>

次に、次のように使用します。

import org.apache.commons.lang3.ArrayUtils;

public class ArrayConcatenation {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};

        int[] concatenatedArray = ArrayUtils.addAll(array1, array2);

        for (int i : concatenatedArray) {
            System.out.print(i + " "); // 出力: 1 2 3 4 5 6
        }
    }
}

このアプローチはクリーンで効率的ですが、外部の依存関係が導入されます。

System.arraycopy()の活用

Javaの組み込みSystem.arraycopy()は、ネイティブなソリューションを提供します。このメソッドは、配列の一部を別の配列にコピーします。手動での配列の作成とインデックスの管理が必要です。

public class ArrayConcatenation {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};

        int[] concatenatedArray = new int[array1.length + array2.length];

        System.arraycopy(array1, 0, concatenatedArray, 0, array1.length);
        System.arraycopy(array2, 0, concatenatedArray, array1.length, array2.length);

        for (int i : concatenatedArray) {
            System.out.print(i + " "); // 出力: 1 2 3 4 5 6
        }
    }
}

このメソッドは効率的で、外部ライブラリを必要としませんが、簡潔性に欠けます。

ループによる手動連結

より明示的ですが、効率の低いアプローチには、両方の配列を反復処理して新しい配列に値を格納する方法があります。

public class ArrayConcatenation {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3};
        int[] array2 = {4, 5, 6};

        int[] concatenatedArray = new int[array1.length + array2.length];

        for (int i = 0; i < array1.length; i++) {
            concatenatedArray[i] = array1[i];
        }
        for (int i = 0; i < array2.length; i++) {
            concatenatedArray[array1.length + i] = array2[i];
        }

        for (int i : concatenatedArray) {
            System.out.print(i + " "); // 出力: 1 2 3 4 5 6
        }
    }
}

このメソッドは簡単で理解しやすく、初心者にも適しています。ただし、特に大きな配列の場合、他のメソッドよりも効率が低くなります。

最適なアプローチは、優先順位によって異なります。addAll()は簡潔さを、arraycopy()は外部ライブラリを使用しない効率性を、手動ループは明確さを提供します。異なる配列の種類(例:String[]double[])に対しては、コードを調整してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です