在Java中,List是集合框架中最常用的接口之一,继承自Collection,代表有序、可重复的元素集合(允许null元素)。其核心实现类有ArrayList(数组实现,随机访问高效)、LinkedList(链表实现,增删首尾元素高效)等。以下按功能分类详解List的常用API及使用示例:

一、添加元素(增)

向List中添加单个或批量元素,支持指定位置插入。

1. boolean add(E e)
  • 功能:在List末尾添加元素e
  • 返回值true(始终返回,因为List允许添加元素)。
  • 示例
List<String> list = new ArrayList<>();
list.add("A"); // 末尾添加"A"
list.add("B"); // 末尾添加"B"
System.out.println(list); // [A, B]
2. void add(int index, E element)
  • 功能:在指定索引index处插入元素element(原索引及后续元素后移)。
  • 注意index必须在[0, size()]范围内(否则抛IndexOutOfBoundsException)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
list.add(1, "C"); // 在索引1处插入"C"
System.out.println(list); // [A, C, B](原索引1的"B"后移)
3. boolean addAll(Collection<? extends E> c)
  • 功能:将集合c中的所有元素批量添加到List末尾
  • 返回值:若List因添加而改变则返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
List<String> newElements = Arrays.asList("C", "D");
list.addAll(newElements); // 批量添加到末尾
System.out.println(list); // [A, B, C, D]
4. boolean addAll(int index, Collection<? extends E> c)
  • 功能:将集合c中的所有元素从指定索引index处开始插入(原索引及后续元素后移)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
List<String> newElements = Arrays.asList("C", "D");
list.addAll(1, newElements); // 从索引1处插入
System.out.println(list); // [A, C, D, B]

二、删除元素(删)

移除List中的单个或批量元素,支持按索引或元素值删除。

1. E remove(int index)
  • 功能:删除指定索引index处的元素,返回被删除的元素(后续元素前移)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String removed = list.remove(1); // 删除索引1的元素
System.out.println(removed); // B
System.out.println(list); // [A, C]
2. boolean remove(Object o)
  • 功能:删除首次出现的元素o(通过equals()判断),返回是否删除成功。
  • 注意:若元素为null,会删除首次出现的null(因为null.equals()会抛异常,内部用==判断null)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "A"));
boolean isRemoved = list.remove("A"); // 删除首次出现的"A"
System.out.println(isRemoved); // true
System.out.println(list); // [B, A]
3. boolean removeAll(Collection<?> c)
  • 功能:删除List中所有包含在集合c中的元素(批量删除,保留不在c中的元素)。
  • 返回值:若List因删除而改变则返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> toRemove = Arrays.asList("B", "D");
list.removeAll(toRemove); // 删除所有"B"和"D"
System.out.println(list); // [A, C]
4. boolean retainAll(Collection<?> c)
  • 功能:保留List中所有包含在集合c中的元素(即删除不在c中的元素,求交集)。
  • 返回值:若List因保留而改变则返回true
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> toRetain = Arrays.asList("B", "C");
list.retainAll(toRetain); // 只保留"B"和"C"
System.out.println(list); // [B, C]
5. void clear()
  • 功能:清空List中所有元素(size变为0,但对象本身仍可使用)。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B"));
list.clear();
System.out.println(list.size()); // 0
System.out.println(list); // []

三、获取与修改元素(查、改)

通过索引获取元素,或修改指定位置的元素。

1. E get(int index)
  • 功能:返回指定索引index处的元素。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String element = list.get(2); // 获取索引2的元素
System.out.println(element); // C
2. E set(int index, E element)
  • 功能:用element替换指定索引index处的元素,返回被替换的旧元素。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String old = list.set(1, "X"); // 替换索引1的元素为"X"
System.out.println(old); // B
System.out.println(list); // [A, X, C]

四、判断与查询(判断状态、查找元素)

判断元素是否存在、获取元素索引等。

1. boolean contains(Object o)
  • 功能:判断List中是否包含元素o(通过equals()判断,null==)。
  • 示例
List<String> list = Arrays.asList("A", "B", "C");
boolean hasB = list.contains("B"); // true
boolean hasX = list.contains("X"); // false
2. int indexOf(Object o)
  • 功能:返回元素o在List中首次出现的索引;若不存在,返回-1
  • 示例
List<String> list = Arrays.asList("A", "B", "A");
int firstA = list.indexOf("A"); // 0(首次出现的索引)
int xIndex = list.indexOf("X"); // -1
3. int lastIndexOf(Object o)
  • 功能:返回元素o在List中最后出现的索引;若不存在,返回-1
  • 示例
List<String> list = Arrays.asList("A", "B", "A");
int lastA = list.lastIndexOf("A"); // 2(最后出现的索引)
4. boolean isEmpty()
  • 功能:判断List是否为空(size == 0)。
  • 示例
List<String> list = new ArrayList<>();
boolean empty = list.isEmpty(); // true(刚创建的List为空)
list.add("A");
empty = list.isEmpty(); // false
5. int size()
  • 功能:返回List中元素的数量。
  • 示例
List<String> list = Arrays.asList("A", "B", "C");
int size = list.size(); // 3

五、迭代器(遍历元素)

List支持多种遍历方式,其中迭代器是安全修改元素的方式。

1. Iterator<E> iterator()
  • 功能:返回普通迭代器,支持单向遍历(hasNext()next())和删除(remove())。
  • 注意:遍历中修改List结构(如add/remove)需用迭代器的remove(),否则抛ConcurrentModificationException
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String elem = iterator.next();if (elem.equals("B")) {iterator.remove(); // 安全删除当前元素}
}
System.out.println(list); // [A, C]
2. ListIterator<E> listIterator()
  • 功能:返回List特有的迭代器,支持双向遍历hasPrevious()previous())、添加(add(E e))、修改(set(E e))等。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
ListIterator<String> listIt = list.listIterator();// 正向遍历
while (listIt.hasNext()) {System.out.print(listIt.next() + " "); // A B C
}// 反向遍历(需先正向遍历到末尾)
while (listIt.hasPrevious()) {System.out.print(listIt.previous() + " "); // C B A
}// 在当前位置添加元素(反向遍历到开头后,添加在最前面)
listIt.add("X");
System.out.println(list); // [X, A, B, C]

六、排序与反转

通过工具类或自身方法调整元素顺序。

1. void sort(Comparator<? super E> c)(Java 8+)
  • 功能:根据比较器c对List进行排序(ArrayListLinkedList均实现)。
  • 示例
List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 2));
// 自然排序(从小到大)
numbers.sort(Comparator.naturalOrder()); 
System.out.println(numbers); // [1, 2, 3]// 自定义排序(从大到小)
numbers.sort(Comparator.reverseOrder());
System.out.println(numbers); // [3, 2, 1]
2. static void reverse(List<?> list)Collections工具类)
  • 功能:反转List中元素的顺序。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Collections.reverse(list); // 反转元素
System.out.println(list); // [C, B, A]

七、其他常用方法

1. List<E> subList(int fromIndex, int toIndex)
  • 功能:返回List中从fromIndex(包含)到toIndex(不包含)的子列表视图(非新集合,修改子列表会影响原List,反之亦然)。
  • 注意fromIndextoIndex需满足0 ≤ fromIndex ≤ toIndex ≤ size(),否则抛异常。
  • 示例
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
List<String> sub = list.subList(1, 3); // 索引1(含)到3(不含)
System.out.println(sub); // [B, C]// 修改子列表,原List也会变化
sub.set(0, "X");
System.out.println(list); // [A, X, C, D]
2. Object[] toArray()T[] toArray(T[] a)
  • 功能:将List转换为数组(详见「数组与List相互转换」专题)。
  • 示例
List<String> list = Arrays.asList("A", "B");
String[] array = list.toArray(new String[0]); // 转换为String数组
System.out.println(Arrays.toString(array)); // [A, B]

八、注意事项

  1. 并发修改异常:使用增强for循环(for-each)遍历List时,若同时调用add/remove(非迭代器方法),会抛ConcurrentModificationException,需用IteratorListIterator的修改方法。
  2. 实现类选择
    • 需频繁随机访问(get):选ArrayList(数组实现,时间复杂度O(1))。
    • 需频繁在首尾增删(add(0, e)remove(0)):选LinkedList(链表实现,时间复杂度O(1))。
  3. null元素处理:List允许nullcontains(null)indexOf(null)等方法可正常处理(用==判断)。

通过上述API,可完成List的大部分操作。实际开发中,需根据业务场景(如增删频率、访问方式)选择合适的实现类,并注意遍历中的并发修改问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95824.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95824.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95824.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure AI Search 探索总结

Azure AI Search 原名 Azure Cognitive Service&#xff0c;是Azure中用来给AI项目构建知识库的组件。知识库本质和数据库很像&#xff0c;但是内部的存储结构和检索算法不一样。比如并不是知识库的每一列都可以用来过滤、检索或group by&#xff0c;而是要根据实际情况配置。A…

高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol

高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol 标签&#xff1a; Python, pip, SSLError, Clash, 网络代理, 问题解决 一、问题描述 在Python开发中&#xff0c;pip 是我们最亲密的伙伴。然而&#xff0c;当你身处需要科学上网的环境&#xff0c…

CSS 核心知识点全解析:从基础到实战应用

大家好&#xff01;今天这篇文章将系统总结 CSS 的核心知识点&#xff0c;从最基础的样式引入到复杂的选择器应用&#xff0c;再到盒子模型、文本处理等实战技巧&#xff0c;全程结合代码示例&#xff0c;让你轻松掌握 CSS 的精髓。一、CSS 是什么&#xff1f;为什么需要它&…

ClickHouse的学习与了解

什么是ClickHouse&#xff1f; ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 在传统的行式数据库系统中&#xff0c;数据按如下顺序存储&#xff1a;RowWatchIDJavaEnableTitleGoodEventEventTime#0893543506621Investor Relations12016/5/18 5:19#1903295…

安卓11 12系统修改定制化_____修改系统 解锁system分区 去除data加密 自由删减系统应用

在定制化系统中。修改系统分区 解锁system。让用户可以自由删减应用。这个在定制化服务中比较常见。对于此项修改服务。需要我们了解基础的分区常识以及常用的几种基础修改步骤。 通过博文了解💝💝💝 1💝💝💝-----修改rom 解锁 system 分区有什么意义 2💝💝…

JetPack系列教程(八):PDF库——让Android应用也能优雅“翻页”

JetPack系列教程&#xff08;八&#xff09;&#xff1a;PDF库——让Android应用也能优雅“翻页” 在Android开发的世界里&#xff0c;加载PDF文件一直是个让人又爱又恨的“小妖精”。爱它&#xff0c;因为PDF是文档界的“万能钥匙”&#xff1b;恨它&#xff0c;因为原生Andr…

Three.js三大组件:场景(Scene)、相机(Camera)、渲染器(Renderer)

上一篇中我们学习了第一个Three.js场景"Hello World"。这一篇就来学习three.js的核心组件。 此图来源&#xff08;Three.js中文网&#xff09; three.js的核心由三大组件构成&#xff1a;场景(Scene)、相机(Camera)和渲染器(Renderer)。下面我将详细介绍这三大件的作…

AI幻觉终结之后:GPT-5开启的“可靠性”新赛道与开发者生存指南

摘要&#xff1a; Sam Altman关于GPT-5将基本终结幻觉的宣告&#xff0c;不仅仅是一次技术升级&#xff0c;它标志着一个“万物皆可AI&#xff0c;但万事皆需验证”的混乱时代的结束。本文将从一个全新的战略视角出发&#xff0c;探讨当“可靠性”取代“创造性”成为AI竞赛的核…

ubuntu远程桌面很卡怎么解决?

服务端方案 完成XRDP的性能优化配置&#xff1a; 1. 首先检查当前的xrdp.ini文件 grep -n "tcp_send_buffer_bytes" /etc/xrdp/xrdp.ini2. 编辑xrdp.ini文件&#xff0c;修改TCP发送缓冲区大小 sudo sed -i s/#tcp_send_buffer_bytes32768/tcp_send_buffer_bytes4194…

[Linux] Linux系统负载监控 Linux服务管理

目录 Linux系统负载监控 系统负载介绍 查看系统负载 负载解读 top 命令 Linux服务管理 systemd 介绍 系统启动管理进程 基本概念 systemd 架构 unit 类型 查看 unit 列表信息 查看单个 unit 信息 控制系统服务 systemctl 命令 unit 配置文件 例&#xff1a;开发…

vector 手动实现 及遇到的各种细节问题

之前对vector的一些功能使用了一下 接下来手动实现一下vector vector的实现和string还是有不小区别的 有很多地方都有细节的问题不同于string的成员变量一个指针一个size一个capacity的成员变量 vector里面存的是三个迭代器iterator 这的迭代器其实就是模版T的指针 这样就…

OpenStack Neutron中的L2 Agent与L3 Agent:新手友好指南

引言&#xff1a;云网络的幕后英雄 在当今的云计算世界中&#xff0c;OpenStack作为开源云平台的佼佼者&#xff0c;为成千上万的企业提供了灵活、可扩展的基础设施服务。而在OpenStack的众多组件中&#xff0c;Neutron&#xff08;网络服务&#xff09;扮演着至关重要的角色—…

【自用】JavaSE--特殊文件Properties与XML、日志技术

特殊文件概述使用特殊文件可以存储多个有关系的数据&#xff0c;作为系统的配置信息属性文件类似于键值对&#xff0c;一一对应存储数据(比如用户名与密码)XML文件存储多个用户的多个属性更适合&#xff0c;适合存储更复杂的数据Properties注&#xff1a;这个属性文件的后缀即使…

中本聪思想与Web3的困境:从理论到现实的跨越

一、中本聪思想的核心精髓中本聪通过比特币白皮书提出的核心思想&#xff0c;可归纳为三大支柱&#xff1a;去中心化货币体系目标&#xff1a;摆脱中央机构控制&#xff0c;避免通货膨胀和政治干预&#xff08;如2008年金融危机暴露的中心化风险&#xff09;。实现路径&#xf…

Centos 用户管理

一.创建用户 在 root账户 或 sudo 权限下 1. 创建用户 useradd xiaoyangzi2.为该用户设置密码或修改密码 passwd xiaoyangzi3. 将用户加入wheel用户组 在 CentOS 中&#xff0c;属于 wheel 组的用户默认可以使用 sudo 权限。 查看所属用户组: groups xiaoyangzi将 xiaoyangzi 加…

C++枚举算法习题

1. 3的倍数枚举&#xff08;基础&#xff09;题目&#xff1a;在之间有10和50多少个数是3的倍数&#xff1f;列举这些数。 解析&#xff1a;枚举10到50之间的数&#xff0c;判断是否能被3整除。优化&#xff1a;计算第一个≥10的3的倍数&#xff08;1234&#xff09;&#xff0…

【SpringBoot系列-01】Spring Boot 启动原理深度解析

【SpringBoot系列-01】Spring Boot 启动原理深度解析 大家好&#xff01;今天咱们来好好聊聊Spring Boot的启动原理。估计不少人跟我一样&#xff0c;刚开始用Spring Boot的时候觉得这玩意儿真神奇&#xff0c;一个main方法跑起来就啥都有了。但时间长了总会好奇&#xff1a;这…

windows环境下使用vscode以及相关插件搭建c/c++的编译,调试环境

windows下使用vscode搭建c/c的编译、运行、调试环境&#xff0c;需要注意的是生成的是xxx.exe可执行文件。另外使用的编译器是mingw&#xff0c;也就是windows环境下的GNU。 我参考的网址是&#xff1a;https://zhuanlan.zhihu.com/p/1936443912806962622 文章分为2种环境搭建…

标准瓦片层级0~20,在EPSG:4326坐标系下,每个像素点代表的度数

在 EPSG:4326&#xff08;WGS84经纬度坐标系&#xff09; 下&#xff0c;瓦片层级&#xff08;Zoom Level&#xff09;的分辨率以 度/像素 为单位&#xff0c;其计算遵循 TMS Global Geodetic 规范&#xff08;单位&#xff1a;度&#xff09;。以下是 标准层级 0 至 20 的分辨…

Unity高级剔除技术全解析

目录 ​编辑层级剔除&#xff08;Layer Culling&#xff09;原理详解 代码示例 业务应用场景 距离剔除&#xff08;Distance Culling&#xff09;技术细节 进阶实现 开放世界优化技巧 视口裁剪&#xff08;Viewport Culling&#xff09;多摄像机协作方案 高级应用场景 …