Java の ArrayList から最後の要素を取得する

Mohammad Irfan 2023年10月12日
  1. size() および get() メソッドを使用して最後の要素を取得する
  2. Java で ArrayListLinkedList に変換する
  3. Java で ArrayListArrayDeque に変換する
  4. Guava ライブラリの使用
  5. まとめ
Java の ArrayList から最後の要素を取得する

このチュートリアルでは、Java の ArrayList から最後の要素を取得する方法を紹介し、トピックを理解するためのサンプルコードもいくつかリストします。

ArrayList は、順序付けられたコレクションに同様のデータを格納するために使用できる動的配列です。Arrays と ArrayList の優れている点は、格納されているインデックスがわかっている場合、格納されている要素にランダムにアクセスできることです。しかし、インデックスがわからない場合、ArrayList の最後の要素にアクセスするにはどうすればよいでしょうか。Python のような他のいくつかの言語は逆索引付けを提供するので、-1 を使用して最後の要素にアクセスできます。このチュートリアルでは、Java の ArrayList から最後の要素を取得する方法を学習します。

size() および get() メソッドを使用して最後の要素を取得する

Java の ArrayList には、ArrayList に存在する要素の数を求めるために使用できる size() メソッドがあります。

import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.printf("The list contains %d elements", list.size());
  }
}

出力:

The list contains 5 elements

ArrayList の最後のインデックスは、その長さより 1つ短くなることがわかっています(ゼロベースのインデックス付けに従うため)。この情報を使用して、最後の要素をフェッチできます。ArrayList の get()メソッドを使用して、最後の要素を取得します。

import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    int lastIdx = list.size() - 1;
    int lastElement = list.get(lastIdx);
    System.out.println("The last index of list is: " + lastIdx);
    System.out.print("The last element of list is: " + lastElement);
  }
}

出力:

The last index of list is: 4The last element of list is: 25

同じロジックを何度も書かないように、ジェネリックメソッドを書いてみましょう。

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    int lastIdx = list.size() - 1;
    E lastElement = list.get(lastIdx);
    return lastElement;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    list1.add(5);
    list1.add(10);
    list1.add(15);
    list1.add(20);
    list1.add(25);
    ArrayList<String> list2 = new ArrayList<String>();
    list2.add("1");
    list2.add("2");
    list2.add("3");
    System.out.println("The last element of list1 is: " + getLastElement(list1));
    System.out.print("The last element of list2 is: " + getLastElement(list2));
  }
}

出力:

The last element of list1 is: 25
The last element of list2 is: 3

空の ArrayList でメソッドを実行するとどうなりますか?空のリストで上記のコードを実行すると、IndexOutOfBoundsException が発生します。これは、size() メソッドが空の ArrayList に対してゼロを返し、そこから 1 を引くと、インデックスとして-1 が得られるために発生します。負の指数というものはありません。次の例では、この例外が返されます。

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    int lastIdx = list.size() - 1;
    E lastElement = list.get(lastIdx);
    return lastElement;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    System.out.println("The last element of list1 is: " + getLastElement(list1));
  }
}

size()メソッドを実行する前に、いくつかの条件を確認しましょう。isEmpty() メソッドを使用して、リストが空かどうかを確認します。

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    if ((list != null) && (list.isEmpty() == false)) {
      int lastIdx = list.size() - 1;
      E lastElement = list.get(lastIdx);
      return lastElement;
    } else
      return null;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    System.out.println("The last element of list is: " + getLastElement(list));
  }
}

出力:

The last element of list is: null

Java で ArrayListLinkedList に変換する

LinkedList クラスは、ArrayList と同様に、List インターフェイスを実装します。LinkedList クラスには、リストの最後の要素をフェッチするために使用できる単純な getLast() メソッドがあります。

ArrayListLinkedList に変換できる場合は、このメソッドを使用できます。このプロセスでは、元の ArrayList は変更されません。

import java.util.ArrayList;
import java.util.LinkedList public class LastElement {
  public static <E> E getLastElementUsingLinkedList(ArrayList<E> arrList) {
    LinkedList<E> linkedList = new LinkedList<E>(arrList);
    return linkedList.getLast();
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.println("The last element of list is: " + getLastElementUsingLinkedList(list));
    System.out.print("The array list is: " + list);
  }
}

出力:

The last element of list is: 25
The array list is: [5, 10, 15, 20, 25]

上記の解決策は、最後の要素を取得するための洗練された方法ではないため、お勧めしません。最後の要素に複数回アクセスする必要がある場合は、ArrayList の代わりに LinkedList(または他のコレクション)を使用することをお勧めします。

Java で ArrayListArrayDeque に変換する

deque は両端キューです。ArrayDeque は、サイズ変更可能な配列機能と deque データ構造を組み合わせたものです。LinkedList と同様に、ArrayDeque にも便利な getLast() メソッドがあり、これを使用して deque の最後の要素を表示できます。このメソッドを使用するには、ArrayList を ArrayDeque に変換する必要があります。

import java.util.ArrayDeque;
import java.util.ArrayList;
public class LastElement {
  public static <E> Object getLastElementUsingArrayDeque(ArrayList<E> arrList) {
    ArrayDeque<E> deque = new ArrayDeque<E>(arrList);
    return deque.getLast();
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.println("The last element of list is: " + getLastElementUsingArrayDeque(list));
    System.out.print("The array list is: " + list);
  }
}

繰り返しますが、このメソッドはあまり洗練されていません。最後の要素に複数回アクセスする必要がある場合は、ArrayList の代わりに ArrayDeque を使用することをお勧めします。

Guava ライブラリの使用

Google Guava ライブラリは、ArrayList から最後の要素を取得する簡単な方法を提供します。このライブラリの Iterables クラスの getLast() メソッドを使用して、最後の要素を取得します。次のコードを実行する前に、必ずこのライブラリをダウンロードしてプロジェクトに追加してください。

import com.google.common.collect.Iterables;
import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    Integer lastEle = Iterables.getLast(list);
    System.out.print("The last element of the array list is: " + lastEle);
  }
}

出力:

The last element of the array list is: 25

リストが空の場合に表示するデフォルト値を getLast() メソッドに提供することもできます。これにより、Java が例外をスローするのを防ぐことができます。

import com.google.common.collect.Iterables;
import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    String lastEle = Iterables.getLast(list, "No Element Found"); // No Element Found is the
                                                                  // default value
    System.out.print("The last element of the array list is: " + lastEle);
  }
}

出力:

The last element of the array list is: No Element Found

まとめ

ArrayList は非常に一般的なデータ構造であり、限られたサイズの通常の配列の問題を排除するために主に使用されます。多くの場合、リストの最後のインデックスがわからないため、リストに格納されている最後の要素を見つけることができません。

size() および get() メソッドを使用して、この要素を表示できます。Google Guava ライブラリは、最後の要素を取得する簡単な方法も提供します。

最後の要素に頻繁にアクセスする必要がある場合は、LinkedListArrayDeque などの他のコレクションを使用することをお勧めします。これらのコレクションには必要なメソッドがあるためです。

関連記事 - Java ArrayList