在 Java 中從 ArrayList 中獲取最後一個元素

Mohammad Irfan 2023年10月12日
  1. 使用 size()get() 方法獲取最後一個元素
  2. 在 Java 中將 ArrayList 轉換為 LinkedList
  3. 在 Java 中將 ArrayList 轉換為 ArrayDeque
  4. 使用 Guava 庫
  5. 總結
在 Java 中從 ArrayList 中獲取最後一個元素

本教程介紹瞭如何從 Java 中的 ArrayList 中獲取最後一個元素,並列出了一些示例程式碼來理解該主題。

ArrayList 是一個動態陣列,可用於在有序集合中儲存類似資料。Arrays 和 ArrayList 的一個好處是,它們允許隨機訪問儲存在其中的任何元素,前提是我們知道儲存元素的索引。但是如果我們不知道它的索引,我們如何訪問 ArrayList 的最後一個元素?其他一些語言(如 Python)提供反向索引,因此我們可以使用 -1 來訪問最後一個元素。在本教程中,我們將學習如何從 Java 中的 ArrayList 中獲取最後一個元素。

使用 size()get() 方法獲取最後一個元素

Java 中的 ArrayList 具有 size() 方法,可用於查詢 ArrayList 中存在的元素數量。

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 中將 ArrayList 轉換為 LinkedList

LinkedList 類,就像 ArrayList,實現了 List 介面。LinkedList 類有一個簡單的 getLast() 方法,可用於獲取列表的最後一個元素。

如果我們可以將 ArrayList 轉換為 LinkedList,那麼我們就可以使用這個方法。這個過程不會修改我們原來的 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]

上述解決方案不是獲取最後一個元素的優雅方式,不推薦使用。如果我們需要多次訪問最後一個元素,那麼建議使用 LinkedList(或其他一些集合)而不是 ArrayList。

在 Java 中將 ArrayList 轉換為 ArrayDeque

雙端佇列是雙端佇列。ArrayDeque 將可調整大小的陣列功能與雙端佇列資料結構相結合。和 LinkedList 一樣,ArrayDeque 也有一個方便的 getLast() 方法,可以用來檢視雙端佇列的最後一個元素。我們只需要將 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);
  }
}

同樣,這個方法不是很優雅,如果我們需要多次訪問最後一個元素,那麼建議使用 ArrayDeque 而不是 ArrayList。

使用 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