2つの配列を連結して新しい配列を作成する

広告

配列と配列を連結するメソッドは Java では用意されていませんが、配列のコピーで使用した System.arraycopy メソッドを使用して手動で配列と配列を連結して新しい配列を作成することができます。ここでは Java で配列を連絡する方法について解説します。

配列と配列を連結する

2 つの配列を連結するメソッドは用意されていませんが、配列のコピーで使用した System クラスで用意されている arraycopy メソッドを使うことで 2 つの配列を連結した新しい配列を作成することができます。

public static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)

パラメータ:
src - 転送元配列
srcPos - ソース配列の開始位置
dest - 転送先配列
destPos - 転送先データ内の開始位置
length - コピーされる配列要素の数

例外:
IndexOutOfBoundsException - コピーによって配列の境界を越えたデータのアクセスが生じた場合
ArrayStoreException - 型の不一致により、配列srcの要素が配列destに保存できなかった場合
NullPointerException - srcとdestのどちらかがnullの場合

手順としては 2 つの配列の要素数を合計した要素を持つ新しい配列を作成しておき、 2 つの配列からそれぞれ要素を新しい配列へコピーします。

配列と配列を連結する(1)

それでは実際に試してみます。まず連結する 2 つの配列の要素数の合計の要素を持つ新しい配列を作成します。

int[] src1 = {28, 14, 35, 19};
int[] src2 = {17, 40, 23};

int[] dst = new int[src1.length + src2.length];

次に 2 つの配列をそれぞれ System.arraycopy メソッドを使って新しい配列へコピーします。

int[] src1 = {28, 14, 35, 19};
int[] src2 = {17, 40, 23};
int[] dst = new int[src1.length + src2.length];

System.arraycopy(src1, 0, dst, 0, src1.length);  
System.arraycopy(src2, 0, dst, src1.length, src2.length);  

これで 2 つの配列を連結した新しい配列を作成することができました。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample17-1.java という名前で保存します。

import java.util.Arrays;

class JSample17_1{
  public static void main(String[] args){
    int[] src1 = {28, 14, 35, 19};
    int[] src2 = {17, 40, 23};
    int[] dst = new int[src1.length + src2.length];

    System.arraycopy(src1, 0, dst, 0, src1.length);  
    System.arraycopy(src2, 0, dst, src1.length, src2.length); 

    System.out.println(Arrays.toString(src1));
    System.out.println(Arrays.toString(src2));
    System.out.println(Arrays.toString(dst));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample17_1.java

その後で、次のように実行してください。

java JSample17_1

配列と配列を連結する(2)

2 つの配列を連結した新しい配列を作成することができました。

-- --

Java で配列を連絡する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。