【Java入門(4)API活用・例外処理 #3】ArrayList

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は…

Java入門4 API活用・例外処理 #3
ArrayList
拡張forループ

というテーマでお送りします。

彩香
配列を更に便利に…って、とても興味深いですね。
今回も、よろしくお願いします。
剛留
また、Javaプログラミングの幅が広がりそうですね。
頑張ります!

【1】ArrayList

ArrayListクラスとは…

複数の要素(オブジェクト)を
纏めて管理する

「コレクション」

の一種です。

順序付けられた要素を扱う

配列の拡張版

のようなイメージです。

コレクション関連は java.util
パッケージに定義されています。

ArrayListクラス
✅ 複数の要素(オブジェクト)を
  纏めて管理する「コレクション」の一種。

✅ 順序付けられた要素を扱う
  配列の拡張版のようなイメージ。

✅ コレクション関連は java.util
  パッケージに定義されている。

Java超入門では、配列を学びましたね。

配列の場合には
要素数分の領域を確保すると

その要素数は固定

でした。

処理の中で
付け加えたり 削除したりできません。

これに対して、ArrayListクラスを使うと
メソッドを使って…

動的に 要素を付け加えたり
削除したり することができる

のです。

とても、便利に使えるクラスなのです。

彩香
確かに、便利そうですね!
しっかり習得して、活用します。
剛留
ええっ? そんな事、できるんですか?
もっと早く教えて欲しかったです。

【2】ArrayListの使い方

それでは、ArrayList の使い方を見ていきましょう。

① オブジェクト生成

まずは、オブジェクトの生成からです。

ArrayList<要素の型> 変数名
= new ArrayList<要素の型>();

new 演算子で ArrayList をインスタンス化して
ArrayList型の変数に代入します。

これで、要素数が 0 の ArrayList の
オブジェクトが作成されます。

ここで、ポイントが3つあります。
1つずつ見ていきましょう。

 

❶ ジェネリクス

Java言語の文法に、このようなものがあります。

<(小なり括弧)・>(大なり括弧)で
囲まれた部分です。

これは、このArrayListで扱う

「要素の型」

を指定するものです。

例えば要素が String型であれば
<String> と記述します。

この < と > を使った型の表現は

「ジェネリクス」

と呼ばれる Javaの書き方です。

少し長いですが…

ArrayList<要素の型>

までを 1つの型 と考えるようにしましょう。

 

❷ 要素は参照型のみ

ここ、注意点です。

ジェネリクスに指定できるのは

参照型だけ

です。基本データ型は指定する事ができません。

ですので、例えば
int型 を ArrayList で扱いたい場合には…

ラッパークラス

を使う必要があります。

ということで…

✕ ArrayList<int>

○ ArrayList<Integer>

ジェネリクスに int型を指定するのはNGです。

Integer型を指定する事になります。

 

❸ Listの型で定義

そして最後のポイント。

ArrayList型の 変数を扱う時、多くの場合

Listインタフェース型

で扱います。

Listインタフェースは、ArrayList や LinkedListなどの

Listを表すクラスの基本的な仕様

を定義しているインタフェースです。

ArrayList<要素の型> 変数名
= new ArrayList<要素の型>();

 ↓

List<要素の型> 変数名
= new ArrayList<要素の型>();

このように、実装を意識しないで、インタフェースの枠組みに
着目して操作しておくことで…

後から ArrayList クラスを別のクラスに変更する
場合にも 変更がスムーズにいくことになります。

ArrayList<要素の型> 変数名
= new ArrayList<要素の型>();

 ↓

List<要素の型> 変数名
= new ArrayList<要素の型>();

と説明してきましたが、このあたりは
使っていくうちに 段々と分かる事も多いものです。

② メソッド

ArrayListで実装している
(Listインタフェース定義している)…

基本的な メソッドを見ておきましょう。

❶ add(E element)

引数1つの add メソッドは

要素を最後に追加する

メソッドです。

大文字の E という型は ジェネリクスで指定された型です。

例えば ジェネリクスで String が指定された場合…

add() メソッドの引数として String型のオブジェクト
(文字列)が渡されることとなります。

ここでは、この追加されるイメージを押さえておいて下さいね。

❷ add(int index, E element)

add() メソッドは、オーバーロードされていて…

こちらのメソッドは、

index で指定した位置に
element で指定したオブジェクトを挿入

するメソッドです。

元にあった要素は、順に後ろにズレる
イメージです。

❸ get(int index)

get() メソッドは

index で指定した位置の要素を 取得

します。

参照値の コピー を取得するため
元の リスト には変化はありません。

❹ remove(int index)

remove() メソッドは

index で指定した 位置の要素を 削除

します。

削除した以降の要素は、1つずつ詰められる
こととなります。

❺ size()

size() メソッドは

現在の要素数を得る

メソッドです。

オブジェクト化した直後は 0 が返ってきます。

❻ clear()

clear() メソッドは

全ての要素を削除

して、要素数が 0 の状態にします。

初期の状態に戻る…という事ですね。

彩香
サンプルを見て、便利さを実感しました。
インタフェースの List の使い方もバッチリです。
剛留
ArrayList は、Javaの ホームラン王です。

【3】拡張forループ

拡張forループとは…

配列やListなどに対して

全ての要素を順に

取り出して処理をする繰り返し構文。です。

拡張forループ
配列やListなどに対して、全ての要素を順に
取り出して処理をする繰り返し構文。

拡張forループは、このように
要素を順に取り出して処理するので

通常の forループでも 書くこともできますが…

拡張forループのほうが、スッキリ書くことができるのです。

拡張forループ
【構文】

for (要素の型 任意の変数名 : 配列名 または リスト変数名) {
   :
 (任意の変数名を使って処理)
   :
}

【例】
for (String str : strList) {
   :
System.out.println( str );
   :
}

for 文の中で、このように 配列や List から
取り出す変数名を指定して、コロンを記述…

その後に「配列名」または「リスト変数名」を
記述します。

例えば、ジェネリクスが String型の List
strListがあるとすると…

取り出す変数を String型の str とすれば
このように記述することができます。

カウンタ変数や、要素数、添字を for 文に
書かなくて良いので、スッキリと書けますね。

彩香
確かに、スッキリ書けますね。
コンパクトな プログラムが書けそうです。
剛留
拡張forループ は、Javaの ホームラン王です。

【まとめ】

【1】ArrayList
✅ 複数の要素(オブジェクト)を
  纏めて管理する「コレクション」の一種。

✅ 順序付けられた要素を扱う
  配列の拡張版のようなイメージ。

【2】ArrayListの使い方
✅ オブジェクト生成
  List<要素の型> 変数名
   = new ArrayList<要素の型>();

✅ add()、remove()などのメソッドで
  要素の操作を行う。

【3】拡張forループ
✅ 配列やListなどに対して、全ての要素を順に
  取り出して処理をする繰り返し構文。

✅ カウンタ変数や、要素数、添字を for 文に
  書かなくて良いので、スッキリと書ける。