1. ホーム
  2. 記事一覧
  3. 【初心者入門】JavaのList(配列)について

2022.11.13

【初心者入門】JavaのList(配列)について

こちらの記事ではJavaにおける「List」の概念と、その基本的な使い方について解説します。

一言で言うと、Listとは、”順序付けられた”、”可変長”のデータの集まりを表現するためのインターフェースです。Listを使用することで、複数のデータを一括で管理することができます。

Listの概念

Javaには、「Collection」インターフェースという、複数の要素の集合という抽象的な概念があります。ListはCollectionの集合体という要素を継承して、順序付けの概念を足したものです。各要素に0,1,2,…のインデックスを割り当てて管理を行います。

また、Listには可変長という特徴もあり、後から要素を足していくことができます。

Listもまだインターフェースという抽象化された概念なので、Listを使う際には、クラスとして実装する必要があります。Listの実装クラスの例には、

  • ArrayList
  • LinkedList

などが存在します。

Listの実装クラス

Listを実装したクラスにもそれぞれ特徴があり、用途に合わせた選択が必要です。

ArrayList

Listを実装する際によく使われるクラスです。要素が連続して格納されており、インデックスを指定して、i番目の要素を取り出すといった操作が可能です。各要素が連続的に格納されている都合上、インデックスを指定しての要素の取り出しは早いですが、要素の挿入や削除は比較的遅いです。

LinkedList

それぞれの要素が前の要素と次の要素の情報を持っていて、先頭の要素から順番にたどっていくことで、各要素へアクセスします。順番にたどる都合上、要素の取り出しは遅く要素の挿入や削除は早いです。

以降の例ではArrayListを使用します。

Listの基本的な使い方

初期化

空のリストを作成をする基本構文は以下のようになります。

List<データ型名> オブジェクト名 = new ArrayList<データ型名>();

List、ArrayListはjava.utilパッケージに含まれているので、ここからインポートして使用します。

以降のサンプルでは、以下の記述で空のリストを作成し、処理を記述しています。

import java.util.ArrayList;
import java.util.List;
// ListとArrayListをインポート

public class Main { 
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
         // 空のリスト(list1)を作成

     /*
     処理記述
     */
    
    }
}

Listで使用できるメソッド

Listでは多くのメソッドを利用することができます。一例を紹介します。

要素の追加

  • add()

    要素を追加します。インデックスを指定して、特定の位置に挿入することも可能です。

List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
list1.add(1,"a");// インデックス1の位置に"a"を挿入
list1.add(null); // null値の追加も可能

System.out.println(list1);

/* 出力結果
[A, a, B, C, null]
  • addAll()

    1つのリストに別のリストの要素すべてを追加します。(リストの結合)

List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
System.out.println("list1:"+list1);// list1を出力

List<String> list2 = new ArrayList<>();
list2.add("あ");
list2.add("い");
list2.add("う");
System.out.println("list2:"+list2);// list2を出力

list1.addAll(list2);// list1にlist2を結合

System.out.println(list1);// 結合結果を出力

/* 出力結果
list1:[A, B, C]
list2:[あ, い, う]
[A, B, C, あ, い, う]

要素の置き換え

  • set()

    インデックスを指定して、指定した要素を別の値に置き換えます。

List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
System.out.println("置換前:"+list1);// 置換前を出力

list1.set(1,"b");// インデックス1の要素"B"を"b"に置換

System.out.println("置換後:"+list1);// 置換後を出力

/*出力結果
置換前:[A, B, C]
置換後:[A, b, C]

要素の取得

  • get()

    インデックスを指定して要素を取得します。

  • size()

    リストに格納されている要素の個数を取得します。

  • subList()

    リストの一部分を取得します。

  • indexOf()

    指定した値を持つ要素のインデックスを返します。

List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");

String element0 = list1.get(0);      // インデックス0の値を取得
Integer listsize = list1.size();     // リストの要素数を取得
List sublist1 = list1.subList(1,3);  // インデックス1~2の要素を別のリストとして取得 
Integer index1 = list1.indexOf("C"); // 値がCの要素のインデックスを取得

System.out.println("0番目の要素:"+element0);
System.out.println("要素の個数:"+listsize);
System.out.println("サブリスト:"+sublist1);
System.out.println("Cのインデックス:"+index1);

/* 出力結果
0番目の要素:A
要素の個数:3
サブリスト:[B, C]
Cのインデックス:2

要素の削除

  • remove()

    指定したインデックス、または値を持つ要素を削除します。同じ値を持つ要素が複数ある場合は、最初の要素のみが削除されます。

  • clear()

    リスト内の全要素を削除します。

List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("A");
list1.add("B");
list1.add("C");

System.out.println("元のリスト:"+list1);
System.out.println("元の個数:"+list1.size());

list1.remove(0);                       //インデックス0の要素を削除
System.out.println("remove(0)後のリスト:"+list1);
list1.remove("B");                                   //最初の"B"を削除
System.out.println("remove(\"B\")後のリスト:"+list1);
list1.clear();                       //リストを空にする
System.out.println("clear後のリスト:"+list1);
System.out.println("clear後の個数:"+list1.size());

/*出力結果
元のリスト:[A, B, C, A, B, C]
元の個数:6
remove(0)後のリスト:[B, C, A, B, C]
remove("B")後のリスト:[C, A, B, C]
clear後のリスト:[]
clear後の個数:0

Listの応用操作

要素の整列

Collectionsクラスのsortメソッドを利用して、昇順に並び替えが可能です。sort()の第2引数にCollections.reverseOrder()を指定することで、降順に並び替えることも可能です。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// CollectionsとList、ArrayListをインポート

public class Main { 
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();//空のリスト作成
        list1.add("D");
        list1.add("B");
        list1.add("A");
    	  list1.add("C");	
    	  System.out.println("元のリスト:"+list1);
    	
    	  Collections.sort(list1);// 昇順に並び替え
    	  System.out.println("昇順に並び替え:"+list1);
    	
    	  Collections.sort(list1,Collections.reverseOrder());// 降順に並び替え
    	  System.out.println("降順に並び替え:"+list1);	
    }
}

/* 出力結果
元のリスト:[D, B, A, C]
昇順に並び替え:[A, B, C, D]
降順に並び替え:[D, C, B, A]

Listの各要素への処理

forEachメソッドを利用することで、一つずつ要素を取り出して、それぞれに処理を行うことができます。

import java.util.ArrayList;
import java.util.List;

public class Main { 
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
    	
    	  list1.forEach(item -> System.out.println(item));//要素を一つずつ出力
    }
}

/* 出力結果
A
B
C

Listと配列との違い

Javaには、Listに似た概念として、「配列(Array)」というものがあります。配列も、順序付けられた要素の集合という意味ではListと似ていますが、決定的な違いはListが可変長なのに対し配列は固定長という点です。配列では初めにメモリ上の連続した領域を確保するため、最初に要素数を宣言し、要素数は後から変更することは(原則)できません。

配列の構文

配列変数名 = new データ型[要素数]

まとめ

Listは、Javaで複数のデータをまとめて扱う際の基本となる機能です。今後、繰り返し処理を行う際などに、必ず向き合わなければなりません。基本的な使い方を押さえると同時に、似ている概念との特徴や定義の違いを理解し、適切に使い分けができるようになりましょう。

  • ListとArrayList、LinkedListの関係性
  • Listで使用できるメソッド
  • Listと配列の違い

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事