/【ライブラリを使って簡単に】Javaの配列の結合方法2017.01.20【ライブラリを使って簡単に】Javaの配列の結合方法Java配列TweetPocketJavaで配列を結合するためにはいくつかの方法がある。その中でも、クラスライブラリを使ってしまうのが楽だろう。このページではJavaの配列の結合についてお伝えする。参考にしていただければと思う。配列を結合する方法はいくつかある。コードを最初から書いてもよいが、Javaのクラスライブラリを使えばスマートに配列を結合できる。配列を結合するために使えるJavaのクラスライブラリの使い方を紹介しよう。利用できるクラスライブラリここでは、3つのクラスライブラリを紹介する。どれを使うかは、いろいろな場面に応じて、使い分けることになる。標準クラスライブラリJava標準のライブラリの中にあるパッケージjava.langにSystemクラスがある。そのSystemクラスに配列をコピーするarraycopyクラスメソッドがある。このメソッドを使うとふたつの配列の間で要素をコピーすることができる。結合した結果を入れる配列を準備しておいて、そこに結合したい配列をコピーする。このような方法ために、このクラスメソッドが使える。コピー先の開始位置,コピーする要素の数)詳細は「クラスライブラリ」のセクションで説明している。Langによって提供されるクラスライブラリがある。ArrayUtilsクラスに配列を結合するaddAllクラスメソッドがある。このメソッドを使うとふたつの配列間の要素を結合した新たな配列を作ることができる。単純に配列を結合するだけなら、System.arraycopyメソッドよりこのメソッドのほうが簡単だ。いえ、準備としてクラスライブラリをダウンロードして、Javaの開発環境に取り込んでおくことが必要である。基本的な書き方はこうだ。配列変数名2)詳細は「クラスライブラリ」のセクションで説明している。8で標準クラスライブラリに新たに追加されたjava.util.streamパッケージにStreamクラスがある。その新たなクラスにconcatクラスメソッドがある。このメソッドを使うとふたつの配列間の要素を結合して新たな配列を作ることができる。Streamを使うために配列からStreamに変換し、また配列に戻す必要がある。一度Streamに変換すればStreamの新たな機能を使うことができる。基本的な書き方はこうだ。Stream変数名2)詳細は「クラスライブラリ」のセクションで説明している。System.arraycopyを使ったサンプルプログラムそれでは実際にサンプルプログラムを確認してみよう。このサンプルプログラムは、最初に結合した結果を入れる配列を準備しておいて、そこに結合したいふたつの配列をコピーする。mn]サンプルプログラムの説明それでは簡単にプログラムの解説をしてゆこう。配列array1を定義し、配列要素を代入する。配列array2を定義し、配列要素を代入する。配列concatenatedArrayをarray1のデータ数とarray2のデータ数の合計の大きさで定義する。メソッドarraycopyでarray1をconcatenatedArrayの先頭からコピーする。メソッドarraycopyでarray2をconcatenatedArrayにコピーしたarray1の後に続けてコピーする。配列concatenatedArrayの要素すべてを表示する。ArrayUtils.addAllを使ったサンプルプログラムこのサンプルプログラムは、結合したいふたつの配列をメソッドの引数として渡している。結合した結果を入れる配列を準備しておく必要はない。addAllメソッドが新たに配列を作ってくれるからだ。mn]サンプルプログラムの説明それでは簡単にプログラムの解説をしてゆこう。配列array1を定義し、配列要素を代入する。配列array2を定義し、配列要素を代入する。メソッド;addAllでarray1とarray2を結合して新たな配列concatenatedArrayを生成する。配列concatenatedArrayの要素すべてを表示する。Streamを使ったサンプルプログラムこのサンプルプログラムは、結合したいふたつの配列をSteamに変換して結合し、また配列に戻している。結合した結果を入れる配列を準備しておく必要はない。toArrayメソッドが新た配列を作ってくれるからだ。mn]サンプルプログラムの説明それでは簡単にプログラムの解説をしてゆこう。配列array1を定義し、配列要素を代入する。配列array2を定義し、配列要素を代入する。配列array1をStream:arrayStream1に変換する。配列array2をStream:arrayStream2に変換する。Stream.concatメソッドによりarrayStream1とarrayStream2を結合して新たなStream:concatenatedArrayを生成する。concatenatedArrayを配列に変換する。配列concatenatedArrayの要素すべてを表示する。クラスライブラリの詳細サンプルプログラムの中で使っているふたつのメソッドのAPI仕様を見てみよう。void内容コピー元の配列の指定された位置から、コピー先の配列の指定された位置へ配列をコピーする。配列要素の一部がsrcによって参照されるコピー元の配列から、destによって参照されるコピー先の配列にコピーされる。コピーされる要素の数はlength引数と同じである。コピー元の配列の中のsrcPosからsrcPos+length-1の位置にある要素が、コピー先のdestPosからdestPos+length-1の位置にひとつひとつにコピーされる。srcとdest引数が同じ配列オブジェクトを参照しているならば、最初にsrcPosからsrcPos+length-1の位置にある要素が、長さの要素とともに一時的な配列にコピーされ、それから一時的な配列の内容がコピー先のdestPosからdestPos+length-1の位置の要素にコピーされる。destがnullならば、NullPointerExceptionを投げられる。srcがnullならば、NullPointerExceptionが投げられ、コピー先の配列は変更されない。なく、もし次のケースが成り立つならば、ArrayStoreException投げられ、コピー先配列は変更されない。・src引数が、配列でないオブジェクトを参照している。・dest引数が、配列でないオブジェクトを参照している。・src引数とdest引数が参照する配列の要素が、異なるプリミティブ型である。・src引数がプリミティブ要素型で配列を参照していて、dest引数が参照要素型で配列を参照している。・src引数が参照要素型で配列を参照していて、dest引数がプリミティブ要素型で配列を参照している。なく、もし次のケースが成り立つならば、IndexOutOfBoundsExceptionが投げられ、コピー先配列は変更されない。・src引数が、マイナス値である。・dest引数が、マイナス値である。・length引数が、マイナス値である。・srcPos+lengthが、src.length、つまりコピー元の配列の長さより大きい。+lengthが、dest.length、つまりコピー先の配列の長さより大きい。なく、もしsrcPosの位置からsrcPos+length-1までのどの配列要素も代入によって変換するとこができなければ、ArrayStoreExceptionが投げられる。+k-1の位置の配列要素にコピーされてしまっている。コピー先の配列のその他の位置の要素は変更されていない。(既に取り上げた制約の理由で、この部分はふたつの配列が参照型の要素型を持つ場合に限って適用される。コピーが配列の境界の外へのアクセスを起こした場合。型の不一致によりsrc配列の要素がdest配列に保存できない場合。srcかdestがnull.の場合。ArrayUtils.addAllここでは、配列要素が参照型の仕様を取り上げて説明する。与えられた配列群のすべての要素を新たな配列に追加する。新たな配列はarray1に続いてarray2のすべての要素を含む。配列が戻された時、それはいつでも新たな配列である。新たな配列に追加される最初の配列。Nullかもしれない。新たな配列に追加される2番目の配列。Nullかもしれない。戻り値:新たな配列、もし両方の配列がnullならばnullである。新しい配意列の型は、最初の配列がnullでない限り最初の配列の型である。最初の配列がnullのなら、型は2番目の配列と同じになる。最初のStreamのすべての要素に続いて2番目のStreamのすべての要素を時間的な余裕をもって結合したStreamを生成する。両方の入力Streamがorderedであれば、結果のStreamもorderedになる。入力Streamのどちらかがparallelであれば、結果のStreamもparallelになる。handlerが両方の入力のために起動される。実装上の注意点:繰り返される結合からStreamを生成する場合の注意である。深く結合されたStream要素へのアクセスは、深い繋がりかStackOverflowExceptionを呼び出す。2番目のStream戻り値:ふたつの入力Streamの結合まとめこのページでは配列の結合方法についてまとめてお伝えした。ライブラリの解説含めて載せているので、使うときがあれば、参照していただければと思う。TweetPocketこのページの続きや関連ページは下記から一覧で確認できます。・「様々な分野や言語の講師にチャレンジしてみたい」という方はぜひIT講師募集のページをご覧ください。リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。IT講師募集のページを見るSNSでもご購読できます。【IT研修専門企業のリスキルテクノロジーです。】エンジニアの入り口に立つために役立つようなコンテンツを日々ご提供していきます。講師や代表やスタッフ陣が毎日楽しく書いています。ご質問・ご指摘等はぜひコメントください。*メールアドレス(公開はされません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。講師スキル向上も目指せますIT講師に応募する。