当前位置: 首页 > news >正文

Java中的List

List集合的特有方法

  • 方法介绍

    方法名描述
    void add(int index,E element)在此集合中的指定位置插入指定的元素
    E remove(int index)删除指定索引处的元素,返回被删除的元素
    E set(int index,E element)修改指定索引处的元素,返回被修改的元素
    E get(int index)返回指定索引处的元素

list中的5种遍历方式

细节点注意:

List系列集合中的两个删除的方法

 1.直接删除元素2.通过索引进行删除

代码示例:

 List<Integer> list = new ArrayList<>();​list.add(1);list.add(2);list.add(3);​//此方法删除的是1索引上的元素list.remove(1);​//此方法删除的是真正的1这个元素Integer i = Integer.valueOf(1);list.remove(i);

ArrayList与数组的区别

  • 数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。

  • 一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。

ArrayList和LinkedList简介

以下内容为查询结果

ArrayList底层是数组,查询快、增删慢;LinkedList底层是链表,查询慢、增删快;

ArrayList底层是数组,存储空间是连续的,可以根据寻址方式直接找到对应的元素位置,时间复杂度是O(1)。

举例来说:在一条街上,第一家店是001号,那么005号在第五间:

列表

但LinkedList底层是链表,存储空间不连续,需要通过指针关联,在查询过程中需要不断跳转新的地址:

LinkedList

这也是ArrayList比LinkedList查询快的原因。

Java中的原生的数组是不能扩容的,如果初始化时申请了5个元素空间,那么就最多能存5个元素。ArrayList底层也是数组,但是支持动态扩容,所以ArrayList是动态数组:

ArrayList插入数据

假设原始容量为5,那么插入新元素时就会扩容,元素拷贝等耗时操作,这就是ArrayList增删慢的原因。但是ArrayList增删元素必然会惩罚扩容和拷贝吗?

ArrayList删除元素

插入同理,尾部插入时不涉及元素拷贝。

LinkedList中,理想状态下,链表的增删操作时间复杂度为O(1):

LinkedList插入元素

LinkedList集合的特有功能

  • 特有方法

    方法名说明
    public void addFirst(E e)在该列表开头插入指定的元素
    public void addLast(E e)将指定的元素追加到此列表的末尾
    public E getFirst()返回此列表中的第一个元素
    public E getLast()返回此列表中的最后一个元素
    public E removeFirst()从此列表中删除并返回第一个元素
    public E removeLast()从此列表中删除并返回最后一个元素

问题

1 ArrayList如何添加元素?

  • 扩容:往ArryList中添加元素的时候,会首先检查是否需要扩容。当size == elementData.length时,表示数据数量已经超过了数组容量,需要扩容,扩容后的数组的长度为原来数组长度的1.5倍;

  • 复制:当扩容检查完毕后,如果添加的元素不在数组尾部,则将索引后面的元素通过System.arraycopy往后移动一位;

  • 赋值:将值赋给数组中的对应索引,并将size++;

如果此时ArrayList的长度为size,在多线程运行的情况下,线程A想要将元素存放在索引为index的位置上,但此时CPU暂停线程A的调度,线程B得到运行的机会,也是向index的位置上添加元素。之后线程A和线程B都继续运行,都会增加size的值,这样数组的长度就变成了size + 2,这样就线程不安全了。

2 ArrayList是否能无限添加元素?会抛出异常吗?

可以无限添加,不会抛出异常。ArrayList会自动为其扩容,扩容后的大小是int newCapacity = (oldCapacity * 3) / 2 + 1。

3 ArrayList和LinkedList的时间复杂度?

ArrayList是线性表(数组):

add(E e):在数组尾部添加元素,时间复杂度为O(1); add(int index, E element):在索引为index的位置添加元素,需要后面的元素后移,时间复杂度为O(n); remove(int index)/remove(Object o):删除元素,需要后面的元素后移,时间复杂度为O(n); set(int index, E element):修改元素,时间复杂度为O(1); get(int index):获取索引为index的元素,时间复杂度为O(1); LinkedList是链表操作:

add(E e):在数组尾部添加元素,时间复杂度为O(1); add(int index, E element):在索引为index的位置添加元素,指针指向操作,时间复杂度为O(1); remove(int index)/remove(Object o):删除元素,指针指向操作,时间复杂度为O(1) set(int index, E element):修改元素,时间复杂度为O(n); get(int index):获取索引为index的元素,时间复杂度为O(n);

4 ArrayList线程安全吗?为什么?如何解决多线程问题?

ArrayList线程不安全,因为相关的操作方法没有做同步,操作没有原子性,在多线程环境下会出现变量的读写异常。比如size++是非原子性的,如果两个线程同时执行,两个线程分别读了size的值,再分别执行size++,最后size的值变成了size + 1而不是size + 2。

多线程环境下使用CopyOnWriteArrayList保证线程安全,活着使用Collections.synchronizedList(list),或者给多线程的操作加锁,或者使用Vector。

相关文章:

Java中的List

List集合的特有方法 方法介绍 方法名描述void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素&#xff0c;返回被删除的元素E set(int index,E element)修改指定索引处的元素&#xff0c;返回被修改的元素E get(int inde…...

Spring 框架模块深度解析:核心容器、数据访问、Web 层与其他关键模块

Spring 可能成为您的所有企业应用程序的一站式商店。但是&#xff0c;Spring 是模块化的&#xff0c;允许您挑选适用于您的模块&#xff0c;而无需引入其他模块。下面的部分提供了 Spring Framework 中所有可用模块的详细信息。Spring Framework 提供了大约20个模块&#xff0c…...

前端配置开发环境,新电脑配置前端开发环境,Vue开发环境配置的详细过程(前端开发环境配置,电脑重置后配置前端开发环境)

简介&#xff1a;有时候&#xff0c;我们需要在新电脑 或者 电脑重置后&#xff0c;配置前端开发环境&#xff0c;具体都需要安装什么软件和插件&#xff0c;这里来记录一下&#xff08;文章适合新手和小白&#xff0c;大佬可以带过&#xff09;。 ✨前端开发环境&#xff0c;需…...

大模型(LLM)的量化技术Quantization原理学习

在自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域的应用越来越广泛。然而&#xff0c;随着模型规模的增大&#xff0c;计算和存储资源的需求也急剧增加。为了降低计算和存储开销&#xff0c;同时保持模型的性能&#xff0c;LLM大模型…...

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…...

力扣hot100:42.接雨水

什么时候能用双指针&#xff1f; &#xff08;1&#xff09;对撞指针&#xff1a; ①两数和问题中可以使用双指针&#xff0c;先将两数和升序排序&#xff0c;可以发现规律&#xff0c;如果当前两数和大于target&#xff0c;则右指针向左走。 ②接雨水问题中&#xff0c;左边最…...

搜索回溯算法(DFS)1------递归

目录 简介&#xff1a; 递归问题解题的思路模板 例题1&#xff1a;汉诺塔 例题2&#xff1a;合并两个有序链表 例题3&#xff1a;反转链表 例题4&#xff1a;两两交换链表中的节点 例题5&#xff1a;Pow&#xff08;x,n&#xff09;-快速幂 结语&#xff1a; 简介&…...

workstation 用途

一 workstation 用途 强大的桌面虚拟化 允许创造多种操作系统可以不用重启就跨不同操作系统进行操作可以提供隔离的安全环境 连接到vsphere 可以远程登陆服务器管理物理主机和虚拟主机任何时间都可登陆提高虚拟机效率 为任何平台开发和测试 1&#xff09;借助一台单一本地…...

【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

题目&#xff1a;SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址&#xff1a;spla-tam.github.io 机构&#xff1a;CMU&#xff08;卡内基梅隆大学&#xff09;、MIT&#xff08;美国麻省理工&#xff09; 总结&#xff1a;SplaTAM&#xff0c;一个新…...

Go Barrier栅栏

1. 简介 实现与pythonthreading.Barrier库类似的功能&#xff0c;多线程同时等待达到指定数量一起放行。 有待改进地方&#xff1a; wait方法没有支持context控制。 2. 代码 import ("context""golang.org/x/sync/semaphore""sync/atomic" …...

[蓝桥杯 2023 省 B] 冶炼金属

P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考题解&#xff1a; #C3150——蓝桥杯2023年第十四届省赛真题-冶炼金属(分块)-Dotcpp编程社区 https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from333.1007.top_right_bar_windo…...

续Java的执行语句、方法--学习JavaEE的day07

day07 一、特殊的流程控制语句 break(day06) continue 1.理解&#xff1a; 作用于循环中&#xff0c;表示跳过循环体剩余的部分&#xff0c;进入到下一次循环 做实验&#xff1a; while(true){ System.out.println(“111”); System.out.println(“222”); if(true){ conti…...

公网IP怎么获取?

公网IP是网络中设备的唯一标识符&#xff0c;用于在Internet上进行通信和定位。对于普通用户来说&#xff0c;了解如何获取自己的公网IP是很有必要的&#xff0c;本文将介绍几种获取公网IP的方法。 方法一&#xff1a;通过路由器查询 大多数家庭和办公室使用的路由器都会有一个…...

连接未来:探索嵌入式系统的智能化之路

连接未来&#xff1a;探索嵌入式系统的智能化之路 嵌入式系统的智能化是连接未来的关键之一。以下是对这一主题的小点论述&#xff1a; 1. 嵌入式系统的定义和特点 嵌入式系统是一种特殊用途的计算机系统&#xff0c;通常嵌入在其他设备中&#xff0c;具有小巧、低功耗、实时…...

基于STM32制作的示波器(可对任意信号进行描点)

基于STM32制作的示波器&#xff08;可对任意信号进行描点&#xff09; 注意&#xff1a;用的屏幕是TFT-LCD&#xff08;MCU 屏&#xff09;正点原子同款屏幕 液晶显示器&#xff0c;即 Liquid Crystal Display&#xff0c;利用了液晶导电后透光性可变的特性&#xff0c;配合显…...

WEB APIs (5)

window对象 BOM&#xff08;浏览器对象模型&#xff09; 其为js操作浏览器提供了方法 window对象是一个全局变量&#xff0c;是BOM树根节点 BOM的属性和方法都是window的&#xff0c;如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…...

物联网常见协议篇

在物联网环境中&#xff0c;物联网协议承担着关键作用&#xff0c;而新手了解物联网协议如传输协议、通讯协议和行业协议等。 一、物联网协议 物联网协议是物联网环境中的关键组成部分&#xff0c;它承担着设备间通信和数据传输的重要任务。这些协议根据其作用的不同&#xff…...

Kubernetes-1

学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件&#xff0c;相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、…...

SpringMVC框架②

三、RequestMapping注解 3、RequestMapping注解的value属性 必须设置 发送一个请求最直观的表示方式就是一个请求路径 altenter 进入接口方法 再用 alte7 查看里面的属性 value值可以是数组 value{"test","test1"} 只满足任何一个请求地址就会调用此方…...

springboot230基于Spring Boot在线远程考试系统的设计与实现

在线远程考试系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到…...

罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践

罗技PUBG鼠标宏压枪技术全解析&#xff1a;从核心挑战到落地实践 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在PUBG等战术射击游戏中&#x…...

AlienFX Tools终极控制方案:彻底释放Alienware设备潜力的完整攻略

AlienFX Tools终极控制方案&#xff1a;彻底释放Alienware设备潜力的完整攻略 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 如果你对Alienware官方臃…...

嵌入式环形缓冲区LwRB:高效数据流管理实践

1. 环形缓冲区&#xff1a;嵌入式数据流管理的基石在嵌入式系统开发中&#xff0c;数据流管理是个永恒的话题。想象一下这样的场景&#xff1a;你的物联网设备每秒接收数百个传感器数据包&#xff0c;串口不断涌入数据&#xff0c;而处理器需要有条不紊地处理这些信息。传统线性…...

【优化轨迹】基于融合粒子群算法的纤维置换机械臂轨迹优化附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

VLAN配置避坑指南:为什么你的Trunk接口加了PVID还是不通?

VLAN配置避坑指南&#xff1a;为什么你的Trunk接口加了PVID还是不通&#xff1f; 刚接触企业网络的新手工程师们&#xff0c;是否经常遇到这样的困惑&#xff1a;明明按照文档配置了Trunk接口的PVID&#xff0c;设备间的VLAN通信却依然无法建立&#xff1f;这背后往往隐藏着对P…...

2025最权威的六大AI学术网站推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现如今&#xff0c;在市面上存在的AI论文网站&#xff0c;它们所具备的功能是各不相同的&…...

PCK文件解析与资源提取全指南:从基础到高级的游戏资源逆向工程实践

PCK文件解析与资源提取全指南&#xff1a;从基础到高级的游戏资源逆向工程实践 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 在游戏开发与学习过程中&#xff0c;我们经常需要分析游戏资源文件以理…...

《为什么90%的数字孪生都是假的?》——没有空间数据的“孪生”,只是一个会动的PPT

《为什么90%的数字孪生都是假的&#xff1f;》——没有空间数据的“孪生”&#xff0c;只是一个会动的PPT你看到的绝大多数“数字孪生系统”&#xff0c;其实只有三样东西&#xff1a;一个3D模型一堆跳动的数据一个看起来很炫的界面但它们有一个共同点&#xff1a;&#x1f449…...

2026年在职研究生论文降AI工具推荐:理论与实践结合部分如何处理

2026年在职研究生论文降AI工具推荐&#xff1a;理论与实践结合部分如何处理 导师发消息说论文AI率超标的时候&#xff0c;我正在食堂吃饭。筷子都差点拿不稳。 后来用了三天时间研究在职研究生论文降AI&#xff0c;踩了不少坑但总算搞定了。最后稳定在用的就是嘎嘎降AI&#…...

Ostrakon-VL-8B多模态运维监控实战:智能日志分析与故障预警

Ostrakon-VL-8B多模态运维监控实战&#xff1a;智能日志分析与故障预警 最近和几个做运维的朋友聊天&#xff0c;大家普遍都在吐槽一件事&#xff1a;每天上班就像在“看监控”和“查日志”之间来回切换。服务器告警一响&#xff0c;就得一头扎进海量的日志文件里&#xff0c;…...