Javaの配列について使い方と参照型変数について解説します♪
18/10/21 14:51:15 19/04/27 19:26:36
Javaはプログラミング学習者が最初に学習する本格的なプログラミング言語と言っても過言ではないでしょう。先にHTML、CSS、JavaScriptなどを学習するケースも多いかもしれませんが、オブジェクト指向で本格的にプログラミングするのはJavaが最初、というケースも多いかと思います。
そこでJavaをしっかり身に付けておくと、その後のPHPやRubyやSwiftなどの習得が早くなります。なのでJavaの基礎をしっかり学習したいのですが、ひとことにJavaの基礎と言ってもいろいろあります。
条件分岐やループやその前段階の出力処理などいろいろ考えられますが、このページでは最初によく躓きやすい、配列と参照型変数について解説します。特に配列は最初よく意味がわからないかもしれませんが、非常に重要な概念です。
Javaだけでなくほとんどのプログラミング言語の配列の概念が出てくるため、Javaで習得しておけばその後のプログラミング言語では簡単に習得できます。なのでこのページでは、Javaの配列と参照型変数をマスターしましょう。
目次
配列とは
そもそもJavaの配列とは何かですが、配列は同じ型の複数の値をまとめて一つの変数として扱うための概念です。通常変数は一つの宣言に対して一つの値しか格納することができず、別の値を格納すると上書きされます。
しかし、配列なら一回の宣言で複数のデータを格納できます。
配列の宣言
配列の具体的な宣言方法は、Javaでは以下のようになります。
型名[ ] 配列変数名;
型名 配列変数名[ ];
まず要素数を指定しない配列の宣言は上記のようになります。次に、要素数を指定する場合は以下のようになります。
型名[ ] 配列変数名;
配列変数名 = new 型名[要素数];
もしくは、以下のように記載します。
型名 配列変数名[ ] = new 型名[要素数];
多少混乱しそうな感じがしますが、無理に覚える必要はありません。配列に限った話ではないのですが、基本的にプログラミング言語は覚えなくても良いです。なぜなら、その都度調べれば良いからです。
その都度調べていたら時間が掛かる、コストパフォーマンスが悪い、という意見が出てきそうですが、同じシステムのなかで一度記載すれば、後はコピペや使い回しで対応できます。
もちろんコピペや使い回しをしてはまずい処理もありますが、宣言のようなものは使い回しで問題ないでしょう。また、何度も書いていれば自然に覚えるので、無理に覚えなくても問題ないと言えます。
つまり、その都度調べれば覚える必要はないですし、その都度調べるのが非効率なほどよく使うコードは、覚えようとしなくても勝手に覚える可能性が高いです。なので、上に書いた配列の宣言も無理に覚える必要はありません。
そういう書き方なんだ、とざっくり知っておくと良いでしょう。
配列の要素に値を代入する
次に配列の要素に値を代入する方法ですが、以下のように記述します。
配列変数名[インデックス] = 値;
インデックスというのは、何番目、という意味で、上のコードは配列のインデックス番目に値を入れる、という意味になります。ちなみに先に宣言しておかないといきなり配列の要素に値を入れることはできません。
上の配列変数名とうのは、すでに宣言済みの配列変数名です。ただし、配列の宣言と同時に値を入れることも可能です。
配列の宣言と同時に値を入れる
配列の宣言と同時に値を入れる方法は以下のようになります。
型名 配列変数名[ ] = {値1, 値2, 値3, ......};
このように記述すると、配列を宣言すると同時に中に値を入れることができます。
要素数の取得
配列の宣言と中に値を入れる方法は上記の通りですが、その配列に対して操作を加えたり参照することができます。その一つが要素数の取得で、以下のように記述します。
配列変数名.length
上記の記述で配列の要素数を取得できます。取得した要素数は変数に入れるか出力するかしないとエラーになりますが、たとえば出力する場合以下のようになります。
System.out.println(配列変数名.length);
これで配列の要素数が出力されます。ちなみにlengthはフィールドやメソッドではなく、配列ように用意された特殊構文です。この違いは細かく追及しなくても問題ないでしょう。配列のテクニックは他にもいろいろありますが、まずはこのくらい押さえておけば、後はその都度使いたいテクニックを調べて使用することができます。
配列の使い方をすべて暗記するのではなく、何ができるのかを主に知っておいて、後はざっくりと書き方を把握して、詳細はその都度調べれば問題ありません。配列の概要や使い方を覚えるのではなく、理解できれば問題ありません。
逆に言えば、書き方を覚えても概念の意味がわかっていないと応用が効かなくなります。
参照型変数とは
次に参照型変数について解説します。まず変数の型には大きく分けると、基本データ型と参照変数型があります。変数の型ってもっといろいろなかったっけ?と思われた方もいるかもしれませんが、おそらくイメージされている変数の型はすべて基本データ型に分類されます。
具体的には、以下のようなものが基本データ型変数です。
- boolean
- byte
- char
- short
- int
- float
- long
- double
配列を学習されている方はすでにこれらの型は学習済みかと思いますが、これらはすべて基本データ型です。要するに、変数の中にそのまま値が入っているのが基本データ型になります。
booleanは一見すると値ではないように思えるかもしれませんが、trueかfalseという値です。一方で参照型変数とは値そのものではなく、値の格納場所を保持する変数です。情報処理の勉強をされた方ならなんとなく覚えがあるかもしれません。
具体的な書き方は以下のようになります。
int a[ ] = new int[3];
int b[ ];
a = b;
たとえばこのように記述すると、aもbも同じ場所を参照するようになります。このように同じ場所を参照する変数を用意してなんの意味があるのかと思われるかもしれませんが、一つを書き換えれば一緒に他の変数の中身も書き換えられるというメリットがあります。
完全に同じメモリの番地を参照する変数を複数作っても使用シーンが少ないかもしれませんが、この技術を応用して、たとえば二つの変数と同じメモリの番地を参照し、それを足し合わせるような処理を作ることも可能です。
int a[ ] = new int[3];
int b[ ] = new int[2];
int c[ ];
c = a+b;
このようにしておけば、cはaとbのメモリの番地を参照して足し合わせます。普通にa+bを入れるのとの違いは、aやbの値を書き換えるとcの値も変わるということです。事務処理などでは、一つの値を書き替えたら全体の合計数も同時に変更したいということが多々あるでしょう。
たとえばそういった際にも、参照型変数は役立ちます。参照型変数の概念はJavaでももちろん役立ちますが、どちらかというとVBAのように事務処理に特化した言語での使用頻度が多いかもしれません。
Javaで参照変数の概念を理解しておけば、他の言語で簡単な事務処理システムを作成する際にも役立ちます。
二次元配列とは
配列は要素を複数格納できるだけでなく、多次元で扱うこともできます。とはいえあまりに多次元にし過ぎるとややこしくなるので、実際の開発現場では三次元まで、四次元まで、といった規約が設けられていることが多いです。
概念としてはそこまで難しくはなくて、二次元配列が理解できればそれ以上に次元が増えても理屈は同じです。なので、二次元配列を押さえておきましょう。ちなみに他の言語で多次元配列を扱ったことのある方は、Javaでも同じことです。
二次元配列の宣言
二次元配列の宣言は以下のようになります。
型名 配列変数名[ ][ ];
一次元配列と比較すると、[ ]が一つ増えました。ちなみに次元が増えるごとに[ ]が一つずつ増えていきます。たとえばint型の二次元配列を宣言してみると、以下のようになります。
int[ ][ ] arrayOfIntTwoDimensions;
オブジェクトでも同じです。
Object[ ][ ] arrayOfObjects;
生成の仕方も一次元配列と同じで、以下のようになります。
配列変数名 = new 型名[配列の要素数][配列の要素数];
int型とObject型の例はそれぞれ以下です。
int[ ][ ] arrayOfIntTwoDimensions = new int[4][5];
Object[ ][ ] arrayOfObjectTwoDimensions = new Object[4][5];
二次元配列の見方
問題は、二次元配列の[ ]二つをどのように使うかです。たとえば、以下の二次元配列がどこの部分を指すのか考えてみます。
value = array[2][3];
わかりやすように[4][4]の配列だったとして、上の[2][3]がどこを指すのか図で示してみます。
おそらくパッと見で「そういうことか」と納得いただけるかと思います。もしかしたらわざわざ図にしなくてもわかっていたかもしれません。黒い四角が[2][3]を表しています。
数学のx軸とy軸で考えると逆になりそうな気もしますが、上記のようになります。この概念が理解できれば基本的な使い方は一次元配列のときと同じなので、そこまで難しいことはないかと思います。
今回は割愛しますが、ループ処理で二次元配列を扱う際には二次元ループ、三次元配列なら三次元ループ、と配列の次元数とループの次元数が対応することが多いです。
人気記事