Javaとクラスライブラリ List(5-8)

記事上広告

java.utilパッケージに分類されるコレクションフレームワーク「List」「Map」「Set」の中のListについての説明記事です。

この記事内のクラスはジェネリクスを使用してます。

種類 概要
List 配列に近い構造を持っている。要素を番号で管理する。
Map 要素にキー(要素を区別する値)を付けて管理する。キーの重複は不可。
Set 要素に順番はなく、要素の重複を許可しない。

Listはインタフェースとして定義されており、Listインタフェースを実装するクラスがあります。

Listインタフェース
実装クラス 概要
ArrayList 基本的なコレクションで配列に近い構造を持っている。
LinkedList 要素同士を前後双方向の関係性(リンク)を保持している。基本的に、要素の追加や削除を多用する場合にはArrayListよりも高速になる。

ArrayListのインスタンス生成

コレクションフレームワークの中でも最も利用しやすいクラスがArrayListです。ArrayListは配列と同じような構造を持っており、また配列よりも便利にデータを管理できます。

ArrayListの
インスタンス生成
List<型> インスタンス変数名 = new ArrayList<型>() ;
記述例 List<Integer> list = new ArrayList<Integer>() ;

List<String> name_list = new ArrayList<String>() ;

宣言する型はListインターフェイスになっていますが「ArrayList<Integer> list」や「ArrayList<String> name_list」という記述でも宣言可能です。

LinkedListのインスタンス生成

LinkedListはArrayList同様に配列に近い用法で利用しますが、前述の通り要素の追加や削除を多用する際に向いています。

LinkedListの
インスタンス生成
List<型> インスタンス変数名 = new LinkedList<型>() ;
記述例 List<Integer> list = new LinkedList<Integer>() ;

List<String> name_list = new LinkedList<String>() ;

宣言する型はListインターフェイスになっていますが「LinkedList<Integer> list」や「LinkedList<String> name_list」という記述でも宣言可能です。

ArrayListおよびLinkedListのメソッドを利用してデータを扱う

ArrayListおよびLinkedListのメソッドの種類や利用法は同じです。つまり、インスタンス生成の部分以外は記述の違いを意識する必要はありません。

戻り値の型や引数部分のEはジェネリクスで指定した型です。例えば「List<String>」の場合はEを全てStringに置き換えてください。

メソッド名 戻り値の型 引数 処理内容
add boolean E element リストの最後に引数で指定した要素を格納します。
add boolean int index,
E element
第一引数で指定した位置に、第二引数で指定した要素を格納します。挿入した以降の要素はインデックスが+1ずつずれます。
clear void なし リスト内の要素を全て削除します。
get E element int index 引数で指定した位置の要素を戻り値で取得できます。
remove E element int index 引数で指定した位置の要素を削除します。以降の要素はインデックスが-1ずつずれます。

戻り値は削除した要素です。

set E element int index, E element 第一引数で指定した位置の要素を第二引数の要素で上書きします。

戻り値は上書き前の要素です。

size int size なし リスト内の要素数を戻り値で取得できます。

リスト サンプルプログラム

以下のプログラムを「Number50.java」という名前でWorkフォルダ内に保存します。

保存が完了したら、コマンドプロンプトを起動し、Number50.javaをコンパイルしてみましょう。※プログラムが長いため、必要に応じてコピペで確認してください 

実行例

C:\work>javac Number50.java

C:\work>java Number50
要素0番目は田中さん
要素2番目は佐藤さん
要素2番目は鈴木さん
リスト内には4個の要素があります

リスト 復習問題

ArrayListについての説明で誤っているものを選んでください
解答群
配列に近い構造を持っている
インデックスは0から始まる
リスト内の要素は削除できる
Mapインターフェイスを実装している
LinkedListについての説明で誤っているものを選んでください
解答群
要素の追加や削除はArrayListよりも高速で動作する
ArrayListのメソッドとは名称も種類も全く別のものを利用する
Listインターフェイスを実装している
インデックスは0から始まる
add(E element)メソッドの説明として誤っているものを選んでください
解答群
引数にはジェネリクスで指定した型のデータを指定する
戻り値はない
リストの最後に要素を追加する
戻り値の型はboolean
set(int index, E element)メソッドの説明として誤っているものを選んでください
解答群
戻り値がある
第一引数で指定した位置に、第二引数で指定した要素を上書きする
第一引数で指定した位置に、第二引数で指定した要素を追加する
第二引数にはジェネリクスで指定した型のデータを指定する
remove(int index)メソッドの説明として誤っているものを選んでください
解答群
削除した部分のインデックスは空データとして扱われる
削除した部分以降のインデックスは-1ずれる
削除したデータが戻り値で取得できる
要素数が5のリストに対してremove(5)は指定できない
お疲れ様でした。

まとめ

    • ArrayListはシンプルなリストで配列に近い構造を持っている
    • 要素の追加や削除を多用する際にはLinkedListの方が高速となる
    • ArrayListおよびLinkedListのメソッドは使い分けをする必要はない
    • メソッドを利用して要素の追加、削除、取得等が可能
参加 ブログランキング

記事頑張って書いたかもねー?と思う方は下を押してもらえるといいかなーなんて
にほんブログ村 IT技術ブログへ
にほんブログ村


Javaランキング

目次へのアクセス
スポンサーリンク
レクタングル

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル