前回、前々回と配列について説明しました。
今回は配列と似ているけど少し違う、「ArrayList」について説明していきます。
◆ArrayListとは
ArrayListは配列と同じで複数の要素を一つにまとめて扱うことができる仕組みです。
考え方は配列と同じなのですが、決定的に異なる点があります。
以前扱った配列は要素の数を指定してあげなければいけませんでした。
そのため要素を追加することができません。
一方ArrayListを用いると、要素の数を変更することができます。
ではいったいどのように要素の数を変更するのでしょうか。
まず構文は以下のようになっています。
ArrayList<データ型> 変数名 = new ArrayList<データ型>(初期サイズ);
ArrayListではデータ型は<>で括り、new演算子を用いてインスタンス化します。
そして最後に()の中にArrayListの初期のサイズを指定します。
では実際にサンプルプログラムをみてみましょう!
import java.util.ArrayList; public class SampleArrayList { <%%KEEPWHITESPACE%%> public static void main(String[] args) { <%%KEEPWHITESPACE%%> ArrayList<String> array = new ArrayList<String>(3); <%%KEEPWHITESPACE%%> array.add("田中"); <%%KEEPWHITESPACE%%> array.add("鈴木"); <%%KEEPWHITESPACE%%> array.add("高橋"); <%%KEEPWHITESPACE%%> System.out.println(array.get(1)); <%%KEEPWHITESPACE%%> } }
実行結果「鈴木」
こちらがArrayListを使ったサンプルプログラムになります。
まず注目するのは5行目です。
ArrayList; array = new ArrayList(3);
この文ではString型のArrayListを作成しています。
そこに7,8,9行目で田中、鈴木、高橋という3つの文字列を、addメソッドを使って要素を追加しています。
これでArrayListに要素を追加することができました。
追加した値を取り出すためには11行目のようにgetメソッドを用います。
getの後ろの()に要素の番号を指定してあげます。
要素番号は追加する順番で0から割り振られます。
サンプルでは田中、鈴木、高橋に0,1,2の番号が順番に付いています。
ここでは1の値を取ってきているので「鈴木」が出力されます。
◆ArrayListクラス
Javaでは、開発者が頻繁に使用する機能などを纏めたクラスをパッケージ化して、クラスライブラリという形で提供しています。
その中にArrayListクラスも用意されています。
そのためArrayListを使うためにはインポートを宣言しなければいけません。
それがサンプルの1行目、 import java.util.ArrayList; の部分になります。
ここで「ArrayListを使います。」ということを宣言しているわけです。
◆ジェネリックスとラッパークラス
ArrayListではデータ型を<>で指定しました。
これが「ジェネリックス」です。
ジェネリックスで指定できるデータ型は参照型のみとなっています。
そのためサンプルのようにStinrg型は指定できても、intやbooleanといった基本データ型は使うことができません。
しかし基本データ型もArrayListで使いたい場面は当然出てきます。
そこで出てくるのが「ラッパークラス」です。
ラッパークラスを用いると、基本データ型を参照型へ変換することができます。
基本データ型とラッパークラス対応は以下の通りとなっています。
◆ダイアモンド演算子
ArrayListを作成する際には左辺、右辺ともにジェネリックスで型を指定していました。
しかしJava SE 7から右辺の方を省略することができるようになりました。
構文にしてみると以下のようになります。
ArrayList<データ型> 変数名 = new ArrayList<>();
右辺のデータ型が省略されていますね。
これをダイアモンド演算子と呼びます。
ちなみに()内の初期サイズも省略可能です。
ではもう一つサンプルを作ってみます。
import java.util.ArrayList; public class SampleArrayList_2 { <%%KEEPWHITESPACE%%> public static void main(String[] args) { <%%KEEPWHITESPACE%%> ArrayList<Integer> al = new ArrayList<>(); <%%KEEPWHITESPACE%%> al.add(100); <%%KEEPWHITESPACE%%> al.add(200); <%%KEEPWHITESPACE%%> al.add(300); <%%KEEPWHITESPACE%%> System.out.print(al); <%%KEEPWHITESPACE%%> } }
実行結果「[100, 200, 300]」
5行目・・・左辺ではを指定、右辺の<>の中のデータ型は省略されています。
7,8,9行目・・・それぞれ100,200,300という整数の値が格納されていますが、これは参照型なのでオブジェクトになります。
11行目・・・実行結果をみてわかる通り、alを直接出力しようとすると、[]の中に格納されたデータ全てが「,」で区切られ表示されます。
◆ポイントまとめ
・ArrayListは配列と違い要素の数を変えることができる。
・データ型は<>に指定(ジェネリックス)。Java SE 7からは右辺<>の中は省略可能(ダイアモンド演算子)。
・<>内に指定できるものは参照型のみ。基本データ型はラッパークラスを用いて使用する。
今回はここまでとします。