【初心者が注意したい】Java配列コピーの方法まとめ

javaの配列のコピー方法
  • このエントリーをはてなブックマークに追加
  • Pocket

Javaの配列をコピーしたいとき、普通にコピーすると元の配列と同じところを見に行くことになる。同じ配列が二個できて、利用できるようになるわけではないということだ。

このページではJavaの配列のコピー方法をまとめてご紹介した。

Javaの配列をコピーする方法

配列の要素をデータ処理する場合、元のデータを残してデータを並べ替えたり、あるグループのデータだけを取り出したりする場合がある。

このような時、元のデータをそのまま取っておくなら、新たな配列を作ってコピーする必要がある。

配列をコピーする方法はいくつかある。

forループを使ってコピーのためのコードを最初から書いてもよいが、Javaのクラスライブラリを使えばもっとスマートに配列をコピーできる。

はじめに、forループを使って配列をコピーする方法をみてみよう。

forループを使った配列コピーのサンプルプログラム

このプログラムは、配列numbersを作った後に新たに配列newNumbersを作り、forループを使って元の配列の値を3個コピーしている。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] int型で3個の要素数を持つ配列参照変数numbersを宣言し、初期値を代入する
  • [2] int型で3個の要素数を持つ配列参照変数newNumbersを作る。
  • [3]-[4] forループによりnewNumbersの先頭からnumbersの3つの値を代入する。
  • [5] 配列の全ての値をひとつずつ表示する。

では、次に配列をコピーするために使えるJavaのクラスライブラリの使い方を紹介しよう。

Java 標準クラスライブラリを使用する

Java標準のライブラリの中にあるパッケージjava.langにSystemクラスがある。そのSystemクラスに配列をコピーするarraycopyクラスメソッドがある。このメソッドを使うとふたつの配列の間で要素をコピーすることができる。

コピー先の配列を準備して、そこにコピー元の配列をコピーする。このような方法ために、このクラスメソッドが使える。コピー元とコピー先の配列のコピー開始位置やコピーする要素の数を指定することができる。

書き方の基本はこれだ。

このクラスライブラリは、途中で何かの不具合が見つかると例外が発生して、コピーが中断する。このとき,既にコピーされた要素はそのままなので注意が必要である。

System.arraycopyを使ったサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

このサンプルプログラムは、最初にコピー先の配列を準備しておいて、そこにコピー元の配列の要素をコピーする。

ここでは,配列の要素がプリミティブ型の場合と参照型の場合のサンプルプログラムを用意した。

配列要素がプリミティブ型

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] int型の配列参照変数arrayを宣言し、3個の初期値を代入する。
  • [2] int型で3個の要素数を持つ配列参照変数newArrayを作る。
  • [3] arraycopyクラスメソッドを使って、配列arrayの要素を配列newArrayにコピーする。
  • [4]配列newArrayの値を表示する。

配列要素が参照型

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 文字列型の配列arrayを宣言し、3個の初期値を代入する。
  • [2] 文字列型で3個の要素数を持つ配列参照変数newArrayを作る。
  • [3] arraycopyクラスメソッドを使って、配列arrayの要素を配列newArrayにコピーする。
  • [4] 配列newArrayの要素を表示する。

配列の浅い(Shallow)と深い(Deep)コピー

配列のコピーには、Shallow コピーとDeepコピーがある。

Shallowコピーは、配列の入れ物はひとつで、新たに宣言した配列参照変数に配列の場所を指す配列参照変数の値だけをコピー、つまり代入する。このコピーでは、入れ物はひとつなので配列の要素の値を変更すると、コピー元もコピー先も両方とも値が変化する。

array

一方、Deepコピーは新たな配列参照変数を宣言し、配列の入れ物も新たに作って、配列の要素のほうをコピーする。

このコピーでは入れ物は別なので、配列の要素を変更しても他方の要素の値が変更されることはない。

array-copy

では、実際のプログラムを見てみよう。

Shallowコピーのサンプルプログラム

このプログラムは、配列のShallowコピーを行う。コピー先の値を変更した時、コピー先の要素の値も変化することが確認できる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしていこう。

  • [1] int型で3個の要素数を持つ配列参照変数arrayを宣言し、初期値を代入する
  • [2] int型で配列参照変数newArrayを作り,参照変数arrayの値を初期値として代入する。
  • [3]-[4] arrayとnewArray配列の全ての値をひとつずつ表示する。
  • [5] 配列newArrayの2番目の要素に999を代入する。
  • [6]-[7] arrayとnewArray配列の全ての値をひとつずつ表示する。

Deepコピーのサンプルプログラム

このプログラムは、配列のDeepコピーを行う。コピー先の値を変更した時、コピー先の要素の値は変更されないことが確認できる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしていこう。

  • [1] int型で3個の要素数を持つ配列参照変数arrayを宣言し、初期値を代入する
  • [2] int型で3個の要素数を持つ配列参照変数newArrayを作る。
  • [3] arrayからnewArrayに配列の要素をすべてコピーする。
  • [4]-[5] arrayとnewArray配列の全ての値をひとつずつ表示する。
  • [6] 配列newArrayの2番目の要素に999を代入する。
  • [7]-[8] arrayとnewArray配列の全ての値をひとつずつ表示する。

まとめ

このページではJavaの配列のコピー方法についてまとめてきた。はじめは混乱するかもしれないが、重要な考え方だ。

参考にしていただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する