Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何从 Java 的 List 中删除第一个元素

如何从 Java 的 List 中删除第一个元素

原创
作者头像
HoneyMoose
发布于 2022-04-16 13:07:52
发布于 2022-04-16 13:07:52
12.4K00
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:0
代码可运行

概述

在这个实例中,我们将会演示如何删除在 Java 中定义的 List 的第 1 个元素。

我们将会针对这个问题使用 List 接口的 2 个实现 ArrayList 和 LinkedList 来进行演示。

创建一个 List

首先,我们来创建一个我们需要的 List

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @BeforeAll
    public void startup() {
        list.add("cat");
        list.add("dog");
        list.add("pig");
        list.add("cow");
        list.add("goat");

        linkedList.add("cat");
        linkedList.add("dog");
        linkedList.add("pig");
        linkedList.add("cow");
        linkedList.add("goat");
    }

ArrayList

根据我们创建的 List,我们来演示在 ArrayList 中删除第一个元素,然后确定删除后的 List 不再包含有任何一句删除的元素了。

使用下面的测试方法来进行测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * ArrayList remove first
     */
    @Test
    public void testGivenList_whenRemoveFirst_thenRemoved() {
        list.remove(0);

        assertThat(list, hasSize(4));
        assertThat(list, not(contains("cat")));
    }

通过上面的代码我们可以了解到,我们使用了 remove(index) 这个方法来删除我们需要处理的 List 中的第一个元素。

需要注意的是:remove 这个方法,针对 List 接口的所有实现都是可以使用的。

LinkedList

LinkedList 同时也实现了 remove(index) 这个方法,同时 LinkedList 还有一个自己的 removeFirst() 方法。

让我们考察下面的测试方法,来确定删除是否正确。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * LinkedList remove first
     */
    @Test
    public void testGivenLinkedList_whenRemoveFirst_thenRemoved() {

        linkedList.removeFirst();


        assertThat(linkedList, hasSize(4));
        assertThat(linkedList, not(contains("cat")));
    }

时间复杂度

尽管上面的 remove 方法类似,但是这 2 个方法的时间复杂度是不同的: ArrayList 的 remove() 方法的时间复杂度是 O(n) 。 LinkedList 的 removeFirst() 方法的时间复杂度是 O(1) 。

这是因为 ArrayList 在 List 中是使用 Array(数组)的,当我们使用删除方法的时候,ArrayList 将会重新将剩余的元素进行拷贝。如果你需要删除 List 越大,那么需要移动的元素越多。因此所需要的时间复杂度越高。

LinkedList 却是使用的是指针(points),这个指针的意思就是每一个元素使用指针来指向下一个元素,同时还使用一个指针来指向前一个元素。

因此,在 LinkedList 删除第一个元素的时候,需要进行的操作就只需要修改第一个元素的指针就可以了。

不管你的 List 有多大,这个修改指针的操作需要的时间是相同的。

结论

在本文中,我们对如何对 List 中的第一个元素进行删除进行了说明和讨论。

并且针对 List 接口的 2 个实现来分别了解了不同的时间复杂度。

上面的内容的源代码可以在 java-tutorials/RemoveFirstElementTest.java at master · cwiki-us-docs/java-tutorials · GitHub 中进行下载和编译。

需要注意的是 assertThat 断言使用的是 Hamcrest 。

https://www.ossez.com/t/java-list/13919

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java中List集合
ArrayList底层是基于数组实现的,数组是一串连续的存储空间,所以ArrayList集合内部的元素必须是连续存储的,当要在中间删除或者插入一个元素,其后面的元素都需要进行一移动,因此ArrayList集合不适合删除和插入,而适合查找和遍历操作;
訾博ZiBo
2025/01/06
950
Java中的LinkedList的方法的应用
在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:
全栈程序员站长
2022/07/04
3480
深入解析 Java 中的 List 集合声明与使用
这里先给大家推荐一篇实用的好文章:《深入掌握栈与队列,用Java构建高效数据处理之道》 来自作者:bug菌
喵手
2024/11/24
3490
深入解析 Java 中的 List 集合声明与使用
解密Java中List接口底层实现原理
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/01/31
3500
解密Java中List接口底层实现原理
以纯文字的形式讲讲ArrayList 与 LinkedList 的区别
在 Java 编程中,ArrayList 和 LinkedList 都是常用的集合类,它们都实现了 List 接口,但在内部结构、性能特点、适用场景等方面存在着诸多差异。深入理解它们的区别,有助于我们在实际开发中根据具体需求选择合适的集合类型,从而提高程序的效率和可维护性。
全干程序员demo
2025/04/07
1100
【面试题精讲】LinkedList 插入和删除元素的时间复杂度
LinkedList 是一种链表数据结构,它的插入和删除操作在某些情况下具有较好的性能。下面我将详细解释 LinkedList 插入和删除元素的时间复杂度。
程序员朱永胜
2023/10/22
1.2K0
Java List的get方法
List的get方法是Java的集合框架中常用的一个方法,用于获取List集合中指定位置的元素。
很酷的站长
2023/10/20
7110
Java List的get方法
3.5链表----链表中元素的删除(只删除一个元素情况)
若要删除索引为2位置的元素,需要获取索引为2位置的元素之前的前置节点(此时为索引为1的位置的元素),因此我们需要设计一个变量prev来记录前置节点。
wfaceboss
2021/12/24
1K0
3.5链表----链表中元素的删除(只删除一个元素情况)
ArrayList、LinkedList的特点、实现、优缺点比较
ArrayList和LinkedList都是Java中的集合框架中的列表(List)接口的实现类。它们都实现了相同的接口,但是它们的内部实现和使用场景有所不同。
堕落飞鸟
2023/04/04
5720
Java 从一个 List 中删除重复的元素
在 Java 中删除 List 中重复元素的主要思路就是将 List 转换为 Set。
HoneyMoose
2022/05/02
1.1K0
Java 从一个 List 中删除重复的元素
Java中LinkedList类的特性与用法详解
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/25
5230
Java中LinkedList类的特性与用法详解
【JavaSE专栏49】Java集合类LinkedList解析,链表和顺序表有什么不同?
本文讲解了 Java 中集合类 LinkedList 的语法、使用说明和应用场景,并给出了样例代码。
Designer 小郑
2023/08/02
3250
【JavaSE专栏49】Java集合类LinkedList解析,链表和顺序表有什么不同?
java集合框架-LinkedList
LinkedList 是 Java 集合框架中的一种数据结构,实现了 List 接口,也可以被当做队列和栈来使用。LinkedList 内部使用双向链表实现,可以在任意位置插入或删除元素。
玖叁叁
2023/05/07
1290
Java集合:List集合
ArrayList是List接口的典型实现类,本质上,ArrayList是对象引用的一个变长数组。
栗筝i
2022/12/01
1.8K0
【JAVA】List接口
ArrayList是 List 接口的一个实现类,它是程序中最常见的一种集合。 ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,Array List 会在内存中分配一个更大的数组来存储这些元素,因此可以将 ArrayList 看作一个长度可变的数组。ArrayList 的元素插人过程如图。
颜颜yan_
2023/03/06
8320
【JAVA】List接口
Java集合--List
Java集合 作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求; Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。 Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口
贾博岩
2018/05/11
3K0
Java 容器 & 泛型(2):ArrayList 、LinkedList和Vector比较
序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表。确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。实现List的有:ArrayList、LinkedList、Vector、Stack等。值得一提的是,Vector在JDK1.1的时候就有了,而List在JDK1.2的时候出现,待会我们会聊到ArrayList和Vector的区别。
哲洛不闹
2018/09/19
4820
Java 容器 & 泛型(2):ArrayList 、LinkedList和Vector比较
数据结构:深入理解java中的LinkedList
在深度的学习LinkedList之前,我们先来想一个问题。如果排队的逻辑,那我们怎么样可以实现?
一点点
2025/01/12
1410
数据结构:深入理解java中的LinkedList
【Java 基础篇】Java LinkedList 详解:数据结构的灵活伙伴
在 Java 编程中,数据结构起着至关重要的作用。这些数据结构可以帮助我们组织和管理数据,使我们的代码更加高效和可维护。其中之一是 LinkedList,它是一个灵活的数据结构,允许我们高效地进行插入和删除操作。本篇博客将深入探讨 Java 中的 LinkedList,从基础概念到高级用法,为您呈现全面的信息。
繁依Fanyi
2023/10/12
1.5K0
【Java 基础篇】Java LinkedList 详解:数据结构的灵活伙伴
Java中的数组和集合
这创建了一个名为 array 的整型数组,该数组有 5 个元素。可以使用下标访问数组中的元素,例如:array[0] 表示第一个元素,array[1] 表示第二个元素,以此类推。数组下标从 0 开始,因此最后一个元素的下标是 array.length - 1。
小尘要自信
2023/10/10
3990
推荐阅读
相关推荐
Java中List集合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验