在 Java 中從 ArrayList 中獲取最後一個元素
-
使用
size()
和get()
方法獲取最後一個元素 -
在 Java 中將
ArrayList
轉換為LinkedList
-
在 Java 中將
ArrayList
轉換為ArrayDeque
- 使用 Guava 庫
- 總結
本教程介紹瞭如何從 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 庫還提供了一種獲取最後一個元素的簡單方法。
如果我們經常需要訪問最後一個元素,最好使用一些其他集合,如 LinkedList
或 ArrayDeque
,因為這些集合具有所需的方法。