Java 中删除数组的第一个元素
Contents
1. 概述
在本教程中,我们将了解如何删除数组的第一个元素。
此外,我们还将看到使用Java 集合框架 中的数据结构如何 使事情变得更容易。
2. 使用Arrays.copyOfRange()
首先,在 Java 中移除数组元素在技术上是不可能的。引用官方文档 :
“数组是一个容器对象,它包含固定数量的单一类型值。数组的长度是在创建数组时确定的。创建后,它的长度是固定的。”
这意味着只要我们直接使用数组,我们所能做的就是创建一个较小的新数组,然后不包含第一个元素。
幸运的是,JDK 提供了一个方便的静态帮助函数,我们可以使用它,称为Arrays.copyOfRange():
String[] stringArray = {"foo", "bar", "baz"};
String[] modifiedArray = Arrays.copyOfRange(stringArray, 1, stringArray.length);
请注意,此操作的成本为$$ O(n) $$,因为它每次都会创建一个新数组。
当然,这是从数组中删除元素的一种繁琐方式,如果您经常执行此类操作,则改用 Java 集合框架可能更明智。
3. 使用 List 实现
为了保持数据结构(可通过索引访问的有序元素序列)的语义大致相同,使用 List接口 的实现是有意义的。 两个最常见的实现是ArrayList和LinkedList。
假设我们有以下List:
List<String> arrayList = new ArrayList<>();
// populate the ArrayList
List<String> linkedList = new LinkedList<>();
// populate the LinkedList
由于两个类实现了相同的接口,删除第一个元素的示例代码看起来相同:
arrayList.remove(0);
linkedList.remove(0);
在ArrayList的情况下,删除的成本是$$ O(n) $$,而LinkedList的成本是$$ O(1) $$。
现在,这并不意味着我们应该在任何地方都使用 LinkedList作为默认值,因为检索对象的成本是相反的。在ArrayList的情况下,调用get(i)的成本是$$ O(1) $$,在LinkedList的情况下是$$ O(n) $$。