パソナについて
記事検索

Javaのリストを使いこなそう!Arraylistの使い方とサンプル

今回はArraylistの性質や特徴、使い方について解説していきます。

Javaのリストを使いこなそう!Arraylistの使い方とサンプル

今回はArraylistの性質や特徴、使い方について解説していきます。

スキルアップ

2023/02/27 UP

Arraylistクラスは、Listインターフェイスを実装したクラスのひとつです。内部的に配列を利用したリストで、標準的な配列と異なり、あとからサイズを変更できます。

Arraylistはデータベースから取得したデータ処理に利用されることが多く、index値による値の読み書きはとても高速なのが特徴です。

今回はArraylistの性質や特徴、使い方について解説していきます。

JavaのArraylistとはどんなクラス?

JavaのArraylistとはどんなクラス?

Arraylistは、配列を内部に持ったリストのことです。主にデータベースから取得したデータを格納し、処理する際に使われるクラスで、大量のデータ・情報を管理し、プログラム内で素早く呼び出すのに適しています。

一見配列と似ていますが、Arraylistは配列と異なり、あとからサイズ(要素数)を変更して、新しい要素を追加したり上書きしたり、削除する作業を簡単に行えます。

index値での値の読み書きは高速ですが、一方で、配列のサイズが大きくなると、挿入や削除などの要素の操作が遅くなる特徴があります。そのため、Arraylistがあまり大きくなりすぎないよう、注意する必要があります。

また、Arraylistには配列とは異なり、int型やboolean型などのプリミティブ型を入れることはできません。もしプリミティブ型の値をArraylistの要素として扱いたい場合には、格納したいプリミティブ型に対応するラッパークラスを指定する必要があります。

データベースと連係したデータ処理は実務でも頻繁に行われるので、Arraylistを使いこなせるようになっておくことは大切です。

Arraylistの基本の書き方

まずはArraylistを初期化する方法を見ていきましょう。Arraylistは「java.util」に属するクラスなので、必ずファイルの先頭でインポートしておく必要があります。

Arraylistは「List<データ型名> リスト名 = new ArrayList<データ型名>();」の形で記述します。

実際にArraylistを初期化し、要素を宣言するサンプルを見てみましょう。1つ目のサンプルではArraylistの初期化時に、初期化ブロックの構文を利用して、要素に入れる値をセットしています。2つ目のサンプルでは、asList関数を利用して、初期化と同時に要素を格納しています。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<>() {
            {
                add("test1");
                add("test2");
                add("test3");
            }
        };
        List<String> sample2 = new ArrayList<String>(Arrays.asList("test1", "test2", "test3"));
        System.out.println("sample1= " + sample1);
        System.out.println("sample2= " + sample2);
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル1 クリックして拡大

ArrayListの主要メソッドと書き方

サンプル2

ArrayListには、データを扱うためのさまざまなメソッドがあります。今回は実務でも頻繁に使用する、基本的なメソッドをピックアップして紹介します。

要素を追加する

Arraylistに要素を追加するには、List.addメソッドを使用します。List.addメソッドは、前項でも初期化したArraylistに要素を格納するために使用しましたが、既存のArraylistに新しい要素を追加する場合にも使用できます。

また、まとめて複数の要素を追加するには、addAllメソッドを使用します。

サンプルでは、既存のsample1の内容を、sample2にまとめて追加しています。

サンプルコード:

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

public class main {
    public static void main(String[] args){
        List<String> sample1 = new ArrayList<String>(Arrays.asList("たちつてと", "なにぬねの", "はひふへほ"));
        List<String> sample2 = new ArrayList<String>();
        sample2.add("あいうえお");
        sample2.add("かきくけこ");
        sample2.add("さしすせそ");
        sample2.addAll(sample1);

        for(int i = 0; i < sample2.size(); i++) {
            System.out.println(sample2.get(i));
        }
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル2 クリックして拡大

対象の要素を上書きする

Arraylistの要素を更新・上書きする場合は以下のように記述します。

記述例:

        
List<String> sample1 = new ArrayList<String>(Arrays.asList("たちつてと", "なにぬねの", "はひふへほ"));
list[0] = "あいうえお"  //index値が0の要素「たちつてと」を「あいうえお」に書き換える

また、index値を引数にして変更するList.setメソッドも使用します。以下のサンプルではindex値が2の要素を、新しい内容に書き換えています。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>(3);
        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");

        System.out.println("上書き前" + sample1);
        sample1.set(2, "たちつてと");
        System.out.println("上書き後" + sample1);
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル3 クリックして拡大

リストの中から1つの要素を取得する

リストから値を取り出す場合は、以下のように記述します。

記述例:

        
List<String> sample1 = new ArrayList<String>(Arrays.asList("たちつてと", "なにぬねの", "はひふへほ"));
sample1 [0];  //index値が0の要素を取得する

また、List.getメソッドを使用して取得することもできます。List.getで取得する場合は、引数で取得する要素のインデックスを指定します。

サンプルでは、sample1のindex値が2の要素を抜き出して表示しています。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>(3);

        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");

        // リストから3番目の値を取得して表示 
        System.out.println(sample1.get(2));
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル4 クリックして拡大

リストから1つの要素を削除する

リストから要素を削除する場合は、List.removeメソッドを使用します。削除したい要素のindex値を引数で指定します。

以下のサンプルでは、index値が1の要素を削除しています。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>(3);
        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");

        System.out.println("元の文字列" + sample1);
        sample1.remove(1);
        System.out.println("削除後" + sample1);
        System.out.println(sample1.get(1));
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル5 クリックして拡大

リストの要素をすべて削除する

リストから要素をすべて削除して初期化するには、List.clearメソッドを使用します。その時点までに格納されていた要素がすべて失われるので、必要な値がある場合は別のArraylistにコピーしておくと良いでしょう。

ここのサンプルでは、sample1の要素をすべて削除する方法を紹介します。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>();
        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");

        System.out.println("元の文字列:" + sample1);
        sample1.clear();
        System.out.println("クリア後:" + sample1);

    }
}

このサンプルを実行すると以下のように表示されます。

サンプル6 クリックして拡大

要素の数を取得する

可変長であるArraylistの要素数を取得するには、list.sizeメソッドを使用します。Arraylistは可変長であり、要素の追加や削除を頻繁に行います。データベースと連携して使う事が多いため、要素数をプログラミング時に予測することも困難です。

index値を指定した際に存在しない値を指定して例外処理が発生しないために、現在の要素数を取得しておくことが大切です。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>();

        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");
        System.out.println("要素数は" + sample1.size() + "です");
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル7 クリックして拡大

要素を検索する

Arraylist内から特定の文字列を検索するには、indexOfメソッドを使用します。indexOfメソッドを使用すると、検索した文字列のindex値を返します。また、文字列が存在しなかった場合は-1を返します。

サンプルではsample1から「たちつてと」と「らりるれろ」の2つの文字列を検索しています。「たちつてと」は存在するのでindex値の「3」を、「らりるれろ」は存在しないので「-1」を返しています。

サンプルコード:

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

public class main {
    public static void main(String[] args) {
        List<String> sample1 = new ArrayList<String>();

        sample1.add("あいうえお");
        sample1.add("かきくけこ");
        sample1.add("さしすせそ");
        sample1.add("たちつてと");
        sample1.add("なにぬねの");
        sample1.add("やゆよ");

        System.out.println("たちつてとのindexは" + sample1.indexOf("たちつてと") + "です");
        System.out.println("らりるれろのindexは" + sample1.indexOf("らりるれろ") + "です");
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル8 クリックして拡大

要素をソートする

Arraylistの要素を並べ替えるには、Collectionsクラスのsort関数を使用します。特に指定しなければ昇順で並べ替えるため、降順でならべ変えたいときは第二引数に「reverseOrder()」を指定します。

サンプルでは、ランダムに並んでいる数字を昇順と降順に並び替えています。並べ替えを行ったあとは各要素のindex値も変更されていることに注意してください。

サンプルコード:

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

public class main {
    public static void main(String[] args){
        List<String> sample1 = new ArrayList<String>(); 
        sample1.add("4"); 
        sample1.add("2"); 
        sample1.add("1"); 
        sample1.add("3");

        System.out.println("最初:" + sample1);
        Collections.sort(sample1);
        System.out.println("昇順:" + sample1); 
        Collections.sort(sample1, Collections.reverseOrder());
        System.out.println("降順:" + sample1);
    }
}

このサンプルを実行すると以下のように表示されます。

サンプル9 クリックして拡大

Arraylistを使いこなしてデータを便利に扱おう

Arraylistはデータベースからデータを取得して処理するため、実務でも頻繁に使用します。

Arraylistは可変長であることや、その性質上、要素数が多くなると処理が遅くなること、また、index値が小さい要素を変更する場合も処理に時間が掛かるようになる点などに注意しましょう。

今回紹介したメソッド以外にも、要素を扱うためのメソッドが多数あるので、基本的なメソッドを学習したら応用的なメソッドに学習を進めましょう。