在 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 java.util.ArrayList;
import com.google.common.collect.Iterables;
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 java.util.ArrayList;
import com.google.common.collect.Iterables;
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
,因为这些集合具有所需的方法。
相关文章
Java 中从 java.util.date 转为 java.sql.date
发布时间:2023/08/11 浏览次数:190 分类:Java
-
在本文中,我们将讨论如何使用两个方法 - getTime() 和 valueOf(),将 java.util.Date 转换为 java.sql.Date。
在 Java 日期中获取当前时间戳
发布时间:2023/08/11 浏览次数:177 分类:Java
-
这篇文章是关于获取 Java Date 中的当前时间戳的。本文介绍如何获取 Java 中的当前时间戳,并列出一些示例代码以了解该主题。
获取 Java 中的当前年份
发布时间:2023/08/11 浏览次数:145 分类:Java
-
在本文中,讨论了如何在 Java 中获取当前年份的不同方法。在 Java 中使用 java.Util.Date 类获取当前年份
Java 中 SimpleDateFormat 类中的日期格式
发布时间:2023/08/11 浏览次数:195 分类:Java
-
本文将向你展示 Java 的 SimpleDateFormat 类中可用的日期格式。Java 中 SimpleDateFormat 类中的日期格式
如何在 Java 中为日期增加一天
发布时间:2023/08/11 浏览次数:156 分类:Java
-
在本文中,我们将学习如何在 Java 中将日期增加一天。这可以通过使用各种方法来完成,例如 plusDays 方法,Calendar 类方法,向 Date 对象添加毫秒以及 Instant class 方法。如果你使用的是 Java 1.8 或
如何在 Java 中比较两个日期
发布时间:2023/08/11 浏览次数:189 分类:Java
-
在本文中,我们将学习多种方法来比较 Java 中的日期。为了获得理想的结果,我们可以用以下的方法,即 before(),after(),equals() 和 compareTo()。
如何在 Java 中从数组创建数组列表
发布时间:2023/08/11 浏览次数:134 分类:Java
-
本文将介绍在 Java 中从数组创建数组列表的不同方法。在 Java 中,有三种不同的方法可以将数组转换为数组列表,如 Arrays.asList()、Collections.addAll() 和 add()。
如何在 Java 中打印 ArrayList
发布时间:2023/08/11 浏览次数:154 分类:Java
-
在本文中,我们将介绍在 Java 中打印 ArrayList 的多种方法。我们的 Arraylist 将包含一个名为 ModelClass 的类对象,它有一个变量 name 和 getter/setter 函数。
如何在 Java 中创建二维 ArrayList
发布时间:2023/08/11 浏览次数:94 分类:Java
-
在本文中,我们将介绍两个关于如何创建二维 ArrayList 的 Java 方法。在 Java 中使用固定大小的 ArrayList 创建二维 ArrayList