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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL执行计划里面的key_len
以前看MySQL的执行计划,感觉内容有些简陋,平时分析主要就是看是否全表扫描,索引使用是否合理等。基本上也能分析出很多问题来,但是显然有时候会有些疑惑,那就是对于复合索引,多列值的情况下,到底启用了那些索引列,这个时候索引的使用情况就很值得琢磨琢磨了,我们得根据执行计划里面的key_len做一个重要的参考。 我们做一个简单的测试来说明。 CREATE TABLE `department` ( `DepartmentID` int(11) DEFAULT NULL, `DepartmentN
jeanron100
2018/03/21
1.3K0
MySQL执行计划里面的key_len
MySQL8.0之降序索引(descending index)
MySQL8.0引入了降序索引(descending index),今天我们来说说这个特性。
AsiaYe
2021/06/09
5.3K0
MySQL8.0之降序索引(descending index)
MySQL8索引篇:性能提升了100%!!
今天我们一起来聊聊MySQL 8.x版本中新增的三大索引。MySQL 8.x中新增了三种索引方式,这三种索引方式直接让MySQL原地起飞了,如下所示。
冰河
2022/06/15
2.9K0
一文看懂如何分析MySQL Explain(2/3)
⑨ range:如果使用索引获取某些范围区间的记录,那么就可能使用到range访问方法,比如:
程序员小强
2019/06/11
1.6K0
MYSQL高级篇-----索引优化分析
由于有些mysql不能使用full join,不过可以换种方法表示 A 的独有 + AB 共有 + B的独有 union本身就可以去重 所以可以这样使用
默 语
2024/11/20
6530
MYSQL高级篇-----索引优化分析
你知道MySQL 8.0中的索引有哪些新特性吗?看这一篇就够了!!!
在之前MySQL的版本中,只能通过显式的方式删除索引,如果删除后发现索引删错了,又只能通过创建索引的方式将删除的索引添加回来,如果数据库中的数据量非常大,或者表比较大,这种操作的成本非常高。在MySQL 8.0中,只需要将这个索引先设置为隐藏索引,使查询优化器不再使用这个索引,但是,此时这个索引还是需要MySQL后台进行维护,当确认将这个索引设置为隐藏索引系统不会受到影响时,再将索引彻底删除。这就是软删除功能。
冰河
2020/10/29
1.2K0
你知道MySQL 8.0中的索引有哪些新特性吗?看这一篇就够了!!!
有哪些优化mysql索引的方式请举例(sqlserver索引优化)
myisam存储:如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎,比如bbs 中的发帖表,回复表
全栈程序员站长
2022/07/25
1.2K0
有哪些优化mysql索引的方式请举例(sqlserver索引优化)
技术分享 | MySQL 生产环境 GROUP BY 优化实践
两条 SQL 的 GROUP BY 使用了同一个索引,但是效率却相差很多,这到底是为什么呢?
爱可生开源社区
2024/09/14
1240
技术分享 | MySQL 生产环境 GROUP BY 优化实践
MySQL 8.0 新特性之降序索引
MySQL 8.0终于支持降序索引了。其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升序索引。 无图无真相,同一个建表语句,看看MySQL 5.7和8.0的区别。 create table slowtech.t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));
星哥玩云
2022/08/16
1K0
MySQL 8.0 新特性之降序索引
SQL优化全套笔记
1.MySQL版本: 5.x: 5.0-5.1:早期产品的延续,升级维护 5.4 - 5.x : MySQL整合了三方公司的新存储引擎 (推荐5.5) 安装:rpm -ivh rpm软件名 如果安装时 与某个软件 xxx冲突,则需要将冲突的软件卸载掉: yun -y remove xxx 安装时 有日志提示我们可以修改密码:/usr/bin/mysqladmin -u root password ‘new-password’
葆宁
2019/04/19
8620
mysql explain详解
Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。 下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临
butterfly100
2018/04/12
41.5K2
“数据分析师”面试最怕被问到的SQL优化问题(下)
前面我已经带着大家学习了本文的第1-4个部分,今天就带大家学习这剩下的5-8个部分。
朱小五
2020/07/24
1.3K0
“数据分析师”面试最怕被问到的SQL优化问题(下)
MySQL SQL优化
如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。操作如下:
用户9615083
2022/12/25
1.9K0
MySQL SQL优化
MySQL Explain 使用分析
MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.
喝茶去
2019/12/26
3510
解决程序慢,要学会预测表容积,不能一味地加索引
索引是应用程序设计和开发的一个重要方面。如果索引过多,应用程序中的更新、删除等操作会变慢,性能会受到影响;如果索引过少,对查询性能又会产生影响。
CSDN技术头条
2018/07/30
1.1K0
解决程序慢,要学会预测表容积,不能一味地加索引
MySQL8.0新特性集锦
在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。
MySQL技术
2019/09/08
9270
MySQL 索引与性能调优
索引用于快速找出在某个列中有一特定值的行,如果不使用索引MySQL必须从第l条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达某个位置去搜寻数据文件,而不必查看所有数据,可加快数据查询的查询速度提高效率,索引可在创建表时增加,也可动态调整已有表.
王 瑞
2022/12/28
2.3K0
MySQL 索引与性能调优
MySQL 8.0新特性:降序索引
上两篇文章分别介绍了MySQL8.0的相关的新特性《MySQL 8.0新特性:隐藏索引》和《MySQL 8.0新特性:隐藏字段》,本文继续介绍MySQL8.0的另一个相关的新特定性--降序索引;本文通过5.7和8.0进行对比说明;
SEian.G
2021/04/07
3K1
分析两分钟,跑数两小时?这份SQL优化大全建议收藏
左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQL的服务端),我们将Server在细分为sql层和存储引擎层。
lyb-geek
2021/11/17
1.2K0
分析两分钟,跑数两小时?这份SQL优化大全建议收藏
小白学习MySQL - 降序索引的功能和作用
MySQL 5.7中,我们创建了一张测试表t1,包含两个字段c1和c2,插入一些数据,如下所示,
bisal
2022/09/28
2.2K0
推荐阅读
相关推荐
MySQL执行计划里面的key_len
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验