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

2023-05-16

概述

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

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

创建一个 List

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

    @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 不再包含有任何一句删除的元素了。

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

    /**
     * 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() 方法。

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

    /**
     * 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 。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Java 的 List 中删除第一个元素 的相关文章

随机推荐

  • msys2软件包管理工具pacman常用命令

    pacman是arclinux中的软件管理工具 xff0c 也是widows上msys2默认的软件管理工具 pacman可以直接从网络上的软件仓库下载安装及删除软件 xff0c 自动处理依赖关系 xff0c 类似ubuntu中的apt ge
  • conemu配置(让conemu和cmder一样好用)

    ConEmu是一个非常好用的终端 xff0c 支持标签切换功能 xff0c 可以在conemu中同时打开cmd powershell msys2 bash wsl等等 自定义选项多 xff0c 非常好用 但是默认的conemu相比cmder
  • [RN坑] ERROR Error watching file for changes: EMFILE 解决办法。

    遇到此问题 xff0c 重装watchman即可解决 xff0c 解决办法如下 可能需要root权限 xff0c 请相应添加sudo命令 xff1a 1 卸载所有已安装的watchman xff1a brew uninstall force
  • rust语言orbtk GUI基础(old2018)-1.orbtk入门

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 rust语言GUI库简述 rust目前已经有非常多的GUI方案 xff0c 大多数是绑定的其他语言编写的库 xff0c 如gt
  • rust语言orbtk GUI基础(old2018)-2.HelloWorld

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 orbtk helloworld 我们在上一节的代码中加入一个helloworld的label xff1a use orbtk
  • rust语言orbtk GUI基础(old2018)-3.1 orbtk基础控件

    orbtk的api在2019 2进行了修改 xff0c 该文章为2018版 新版请转 新版orbtk gui基础 rust orbtk基础widgets orbtk基础控件demoorbtk控件使用方法orbtk控件原理创建控件为控件添加子
  • rust语言Orbtk GUI库-3.orbtk 控件简介

    2019 9 updated orbtk支持的控件还不是很多 xff0c 目前orbtk内置的控件主要有 xff1a 基础控件 TextBlock xff1a 显示文本 xff0c 不可编辑 xff0c 不可交互TextBox xff1a
  • rust语言Orbtk GUI库-3.1 orbtk基础控件

    orbtk基础控件demo orbtk目前内置的基础控件包括 xff1a TextBlockTextBoxButtonToggleButtoncheck boxSwitchFontIconBlockImageWidgetWaterMarkT
  • SQL - 将查询结果插入到另一张表中

    一 INSERT INTO 注意 xff1a 字段必须一致 xff08 位置一致 xff0c 类型一致 xff09 xff0c 否则会出现数据转换错误 1 字段一致 INSERT INTO 目标表 SELECT FROM 来源表 WHERE
  • Ubuntu18.04设置在开机时自动链接蓝牙键盘

    简介 系统升级到Ubuntu18 04时 xff0c 启动后蓝牙键盘不能自动连接 xff0c 需要虚拟键盘登录后手动连接蓝牙键盘后 xff0c 才能正常使用 如何在开机时自动链接键盘 xff1f 查找蓝牙键盘的Address地址 在Sett
  • iOS scrollview touchbegin

    1 开篇 最近在项目中遇到一个 需求就是在一个可以左右拨动的页面上 xff0c 添加一些交互功能 xff0c 比如说点击某个页面会有文字变化 xff0c 图片变换 xff0c 最后有比较特殊的需求是做个像slider功能的可以拖动的按钮 x
  • 大数据毕业设计 - 选题推荐(一)

    文章目录 1 开题指导1 1 起因1 2 如何避坑 重中之重 1 3 为什么这么说呢 xff1f 1 4 难度把控1 5 题目名称1 6 最后 选题建议3 最后 毕设帮助 xff0c 开题指导 xff0c 资料分享 xff0c 疑问解答 见
  • 大数据毕设题目推荐 - 最新大数据毕设选题 - 毕业设计项目方向课题

    文章目录 0 前言1 如何选题1 1 选题技巧 xff1a 如何避坑 重中之重 1 2 为什么这么说呢 xff1f 1 3 难度把控1 4 题目名称1 5 最后 2 大数据 选题推荐2 1 大数据挖掘类2 2 大数据处理 云计算 区块链 毕
  • 解决OAth2.0的授权token放在header中,导致文件下载验证失效的问题

    1 项目背景 项目是采用微服务架构 xff0c 使用spring gateway作为网关 xff0c 统一做校验权限 2 问题 OAth2 0的授权token是放在请求头Authorization中的 xff0c 如果使用浏览器直接下载文件
  • 大数据毕业设计选题推荐(二)

    文章目录 0 前言1 大数据相关题目2 开题指导2 1 起因2 2 如何避坑 重中之重 2 3 为什么这么说呢 xff1f 2 4 难度把控2 5 题目名称 3 最后 0 前言 这是学长亲手整理的 xff0c 大数据毕设选题系列第二篇 xf
  • 【C语言程序设计】日期函数,日期处理函数!

    定义一个表示日期的结构体类型 xff0c 再分别定义函数完成下列功能 xff1a 计算某一天是对应年的第几天 xff0c 这一年一共多少天 xff1b 计算两个日期之间相隔的天数 两个日期由键盘输入 算法思想 设定结构体类型表示日期类型名为
  • 关于ArchLinux系统中某些软件无法输入中文的问题

    1 检查是否安装语言支持 P S 这个是可选操作 xff0c 可跳过 一般安装的时候都会选安装中文 xff0c 如果不确定 xff0c 最好检查一下 首先检查一下语言设置 span class token function sudo spa
  • Windows Python 命令行如何退出

    在使用 Python 命令行工具的时候 xff0c 我们发现通常使用的 Ctrl 43 C 没有办法退出界面 例如 xff0c 下图所示 xff0c 当我们从键盘上输出 Ctrl 43 C 还是没有办法退出 解决方法 可以通过键盘上输入 C
  • Node 的 cross-env 模块

    cross env 是运行跨平台设置的和使用环境变量 xff08 Node中的环境变量 xff09 的脚本 一句话来说明 cross env xff0c 就是针对相同的语句和命令 xff0c 我们希望这条语句能够同时在 Windows 和
  • 如何从 Java 的 List 中删除第一个元素

    概述 在这个实例中 xff0c 我们将会演示如何删除在 Java 中定义的 List 的第 1 个元素 我们将会针对这个问题使用 List 接口的 2 个实现 ArrayList 和 LinkedList 来进行演示 创建一个 List 首