次に、配列のコピーについて考えてみましょう。同じデータを持つ配列を別々に利用したい場合はどうすればいいでしょうか。すぐに思い付くのは、代入を使う方法です。配列変数を別に宣言して、あらかじめ用意した配列変数の値を代入すれば、同じデータを利用することができます。
では、配列のコピーをするプログラムを作成してみましょう。なお、配列の各要素の初期化を行いつつ配列を作成(new)する方法があるので、それも使ってみています。
出来上がったSample63クラスにリスト4の水色部分を追加してください。
赤字で強調した文でコピー先の配列の宣言と初期化をしています。なお、配列作成時に各要素の値も設定する場合は長さを指定できない点に注意しましょう。
リスト4のプログラムを実行すると、画面3のように、生年月日の一覧が2回画面へ出力されます。
19700820
19730703
19750212
19790118
19721209
----
19700820
19730703
19750212
19790118
19721209
ただし、このように使う場合は注意が必要です。よく考えると、入れ物は1つしか作っていませんので、bdもbd2も同じ入れ物を参照していることになります。配列の要素の値を参照しているだけならいいのですが、これらを更新するということになると問題になることがあります。片方で要素の値を更新すると、もう片方でも要素の値が更新されてしまうのです。確認してみましょう。
出来上がったSample64クラスにリスト5の水色部分を追加してください。ほとんどSample63クラスと同じですから、ソースコードをコピーして張り付けた後に編集しても構いません。Sample63と違う部分を強調しているので参考にしてください。
リスト5のプログラムを実行すると、画面4のように、生年月日の一覧が、配列bd、配列bd2、配列bdの順で合計3回画面へ出力されます。ただし、注目してもらいたい値は強調している点に注意してください。配列bd2の要素の値を変更したのに、配列bdの要素の値まで変更されてしまっているのが分かるはずです。
19700820
19730703
19750212
19790118
19721209
----
19000101
19730703
19750212
19790118
19721209
----
19000101
19730703
19750212
19790118
19721209
このように動作させたくない、つまり、bdの値を完全にコピーした別ものとしてbd2を利用したい場合もあります。そんなときはどうすればよいでしょうか。
答えは簡単です。同じ入れ物をもう1つ用意して、値を全部コピーすればいいのです。値を全部コピーするにはいろいろな方法がありますが、ここでは基本を理解するということでfor文を使った例を紹介します。
出来上がったSample65クラスにリスト6の水色部分を追加してください。ほとんどSample64クラスと同じですから、ソースコードをコピーして張り付けた後に編集しても構いません。Sample64と違う部分を強調しているので参考にしてください。
リスト6のプログラムを実行すると、画面5のように、生年月日の一覧が、配列bd、配列bd2、配列bdの順で合計3回画面へ出力されます。ただし、注目してもらいたい値は強調している点に注意してください。配列bd2の要素の値を変更しても、配列bdの要素の値はそのままで変更されていないのが分かるはずです。
19700820
19730703
19750212
19790118
19721209
----
19000101
19730703
19750212
19790118
19721209
----
19700820
19730703
19750212
19790118
19721209
さて、今回は生年月日を一覧表示するというプログラムについて考えてみました。配列を使うと、値の集合を簡単に処理できることが分かったでしょうか。実際のアドレス機能では氏名、住所、生年月日、電話番号などいろいろなデータを一覧表示できるようになっています。氏名用の配列、住所用の配列といったものを用意すれば、こういう機能を実現することができます。
一覧表示だけをするときはこれでもよいのですが、データを編集するときのことを考えてみるとどうでしょうか。ある人のデータを編集したいという場合は、ある人の「氏名、住所、生年月日、電話番号」を編集したいはずです。そういった場合に、各データ用に配列を用意していると、プログラムが複雑になってしまいます。こういったプログラムを簡単に作ることができるようになるためには、クラスという概念について理解することが必要になってきます。次回は、このクラスを中心にして解説する予定です。
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、PMCの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。
Copyright © ITmedia, Inc. All Rights Reserved.