JavaのList型について!ArrayListの使い方や配列との違いについて説明

入門

JavaのListとは?

JavaのListとは、順序付けられた複数の要素を持つことが出来るインターフェイスです。
Listクラスは、Collectionインターフェイスを継承しており、Collectionインターフェイスは、Iterableインターフェイスを継承しています。

そのため、CollectionインターフェイスとIterableインターフェイスの2つの機能を持っています。

Listインターフェイスを実装しているクラスはいくつかあるのですが、主にVectorArrayListLinkedListなどがあります。
今回のこの記事では、主にArrayListの説明をしていきます。

Listを使用してできる事とは?

Listインターフェイスを使用して実装しているクラスは主に、要素の追加、削除、参照簡単にできるようになっています。
またソートを行うことも容易にできるようになっています。

Listと配列の違いについて

Listと配列の主な違いは、配列は予め変数宣言時にデータを入れる要素の数を指定する必要があり、
要素数を可変することはできないようになっています。
Listでは、インスタンス生成時に要素数を決めなくてもいいため、要素の追加・削除を自由に行うことが可能になっています。

Listと配列どちらを利用すべきか?

Listと配列は使用用途によって使い分けることが大事になっています。

Listを利用する場合の例としては、要素の数が可変で、削除・追加を多く行う場合にはListを使用するのが適していると言えます。

配列を利用する場合は、Listとは逆で、要素数が固定で要素の削除・追加を行わない場合に使用するのが有効と言えます。

Listの基本的な使用方法

Listのインスタンスの生成方法

Listはインターフェイスのため、Listクラスを直接インスタンスを生成することはできません。
そのため、Listを継承しているクラスで生成する必要があります。
今回は、ArrayListのインスタンス生成の作成方法を説明していきます。

宣言する際にListに入れるデータ型を指定することがポイントになっています。

List<データ型名> 変数名 = new ArrayList<データ型名>();

データ型名には、参照型でにて指定する必要があります。
そのため、「int」「boolean」などのプリミティブ型を指定することはできないので、
「Integer」や「Boolean」のような参照型で指定することになります。

List<Integer> intList = new ArrayList<Integer>();
List<Boolean> booleanList = new ArrayList<Boolean>();

Listのインスタンスの生成時に値を追加する方法

インスタンス生成時に下記のようにaddメソッドを使用して値を追加することが出来ます。

List<String> list = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};

ループを使用したListの使用方法

forEachを使用した値の出力方法

forEachを使用した基本構文は以下のようになります。

コレクション名.forEach(引数 -> 繰り返し行う処理);

forEachを使用した値の出力実装例

List<String> list = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};
list.forEach(fruit -> System.out.println("値:" + fruit));

forEachを使用した値の出力実装例の出力値

値:apple
値:lemon
値:melon

拡張for文を使用した値の出力方法

拡張for文を使用した基本構文は以下のようになります。

for (型 変数名 : コレクション名) {
    // 繰り返し行う処理
}

拡張for文を使用した値の出力実装例

List<String> list = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};
for (String fruit : list) {
    System.out.println("値:" + fruit);
}

拡張for文を使用した値の出力実装例の出力値

値:apple
値:lemon
値:melon

for文を使用した値の出力方法

拡張for文を使用した基本構文は以下のようになります。

for (int 変数名 = 0; 変数名 < コレクション名.size(); 変数名++) {
    // 繰り返し行う処理
}

for文を使用した値の出力実装例

List<String> list = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};
for (int i =0; i < list.size(); i++) {
    System.out.println("値:" + list.get(i));
}

for文を使用した値の出力実装例の出力値

値:apple
値:lemon
値:melon

Listの主要メソッドの使用方法

リストの要素の追加に関するメソッド

addメソッド

リストに値を追加するメソッドです。
addメソッドにて、値を追加する際の記載は下記の通りです。

List<String> list = new ArrayList<String>();
// listに「apple」と言う文字列を追加
list.add("apple");

addAllメソッド

リストに引数で渡されたコレクションのすべての要素を追加するメソッドです。
addAllメソッドにて、コレクションの値をすべて追加する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};

List<String> list = new ArrayList<String>();
// listにフルーツのリストをすべて追加
list.addAll(fruits);

setメソッド

リストにセットされた値を置換するメソッドです。
引数に変更したい箇所のインデックスと置換後の値を指定します。
setメソッドにて、置換する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};

// インデックス0番の「apple」を「green apple」に変換
fruits.set(0, "green apple");

要素の取得・検索に関するメソッド

getメソッド

リストにセットされている値を取得するメソッドです。
引数に指定したインデックスの値を取得を行います。
getメソッドにて、値を取得する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};

// インデックス0番の「apple」をfruitにセット
String fruit = fruits.get(0);

sizeメソッド

リストにセットされているインデックスの数を取得するメソッドです。
sizeメソッドにて、インデックスの数を取得する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};

// インデックス0番の「apple」をfruitにセット
String fruit = fruits.get(0);

indexOfメソッド

リストにセットされている値を検索して最初にセットされているインデックスを取得するメソッドです。
indexOfメソッドにて、最初にセットされているインデックスを取得する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// appleが最初にセットされているインデックスを取得
// indexに「0」がセットされます。
int index = fruits.indexOf("apple");

lastIndexOfメソッド

リストにセットされている値を検索して最後にセットされているインデックスを取得するメソッドです。
lastIndexOfメソッドにて、最後にセットされているインデックスを取得する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// appleが最後にセットされているインデックスを取得
// indexに「4」がセットされます。
int index = fruits.lastIndexOf("apple");

containsメソッド

リストに対象の値が設定されているかを判定することが出来ます。
containsメソッドにて、リストに値がセットされているか判定する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// melonがリストに登録されているか判定
boolean flg = fruits.contains("melon");

isEmptyメソッド

リストに要素がセットされているか判定することが出来ます。
isEmptyメソッドにて、セットされているか判定する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// fruitsに要素があるか判定
boolean flg = fruits.isEmpty();

要素の削除に関するメソッド

removeメソッド

リストにセットされている要素の削除を行うことが出来ます。
引数に指定したインデックスをの要素を削除します。
removeメソッドにて、要素を削除する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// fruitsのインデックス「0」の要素を削除
fruits.remove(0);

clearメソッド

リストにセットされている全要素の削除を行うことが出来ます。
clearメソッドにて、要素を削除する際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};

// fruitsに要素をすべて削除
fruits.clear();

リストのコピーに関するメソッド

リストのコピー用のメソッドが準備されている理由

下記ソースのように変数を直接変数にコピー(シャローコピー)を行った場合にコピー元の値も変更されるようになります。

// フルーツのリストを作成
ArrayList<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};
// フルーツのリストをlistにコピー
ArrayList<String> list = fruits;
// listのインデックス「0」の「strawberry」に変更
list.set(0, "strawberry");
// fruitsの配列を出力
fruits.forEach(System.out::println);

上記ソースを実行した際に出力される値は下記になります。

strawberry
lemon
melon
apple

cloneメソッド

リストにセットされている要素をディープコピーすることが出来ます。
cloneメソッドにて、リストをディープコピーを行う際の記載は下記の通りです。

// フルーツのリストを作成
ArrayList<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};
// フルーツのリストをlistにディープコピー
ArrayList<String> list = (ArrayList<String>)fruits.clone();

subListメソッド

リストにセットされている要素から必要な部分を切り出してディープコピーをすることが出来ます。
引数にて取得始めのインデックスと終りのインデックスを指定できます。
※終わりのインデックスは含まないようになっています。
subListメソッドにて、リストを切り出す際の記載は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};
// フルーツのリストのインデックス「1」~「2」をコピー
List<String> list = fruits.subList(1,3);
list.forEach(System.out::println);

上記メソッドの出力結果

lemon
melon

リストのソートに関するメソッド

sortメソッド

リストにセットされている要素をソートすることが出来ます。
sortメソッドにて、ソートする方法は下記の通りです。

// フルーツのリストを作成
List<String> fruits = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
    add("apple");
}};
// フルーツのリストの降順でソート
Collections.sort(fruits);
fruits.forEach(System.out::println);

出力結果は下記の通りです。

apple
apple
lemon
melon

sortメソッドの詳しい使用方法は下記の記事にて詳しく説明しています。

配列からListへの相互変換方法

配列をListへ変換する方法

配列をListへ変換するには、ArraysクラスのasListメソッドを使用します。
asListメソッドを使用しての変換する際の記載は下記の通りです。

String[] fruits = {"apple","lemon","melon"};
List<String> fruitList = Arrays.asList(fruits);

Listを配列へ変換する方法

Listを配列へ変換するには、toArrayメソッドを使用します。
toArrayメソッドを使用しての変換する際の記載は下記の通りです。

List<String> fruitList = new ArrayList<String>(){{
    add("apple");
    add("lemon");
    add("melon");
}};
String[] fruits = fruitList.toArray(new String[0]);
入門
おすすめ書籍
現役エンジニアの気ままブログ

コメント

タイトルとURLをコピーしました