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

Java进阶之单列集合List接口下的通用方法

        Java 集合框架中的 List 接口是最常用的集合类型之一,它代表一个有序的集合(序列)。它允许元素重复,并通过索引精确控制每个元素插入的位置,并可以通过索引访问元素。

一.List 接口概述

1.List 接口的核心概念

  • 有序集合 (Ordered Collection): 这是 List 最根本的特性。它维护元素的特定插入顺序。当你向 List 中添加元素时,每个元素都会被放置在一个特定的位置(索引)。你可以通过元素的整数索引(从 0 开始)精确地访问、搜索、插入或删除该位置的元素。存和取的元素顺序一致。
  • 可重复元素 (Allows Duplicates): List 允许存储重复的元素。同一个对象可以在列表中多次出现。
  • 继承自 Collection: List 接口继承自 Collection 接口,因此它包含了 Collection 的所有基本操作(添加、删除、遍历、判断包含等),并在此基础上添加了大量基于索引的操作
  • 允许 null 元素: 大多数 List 的实现(如 ArrayListLinkedList)允许存储 null 元素。

2.List集合的特有方法

方法名说明
add(int index, E e)在指定位置插入元素
get(int index)返回指定位置的元素
set(int index, E e)替换指定位置的元素
remove(int index)删除指定位置的元素
indexOf(Object o)返回元素首次出现的索引(未找到返回-1)
lastIndexOf(Object o)返回元素最后一次出现的索引
size()返回列表中元素的数量

完整示例代码:

import java.util.ArrayList;
import java.util.List;public class ListOperations {public static void main(String[] args) {// 初始化列表List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("cherry");list.add("date");list.add("elderberry");// 1. 在索引1插入"grape"list.add(1, "grape");System.out.println("1. 插入 grap: " + list);// 2. 在索引3插入"fig"list.add(3, "fig");System.out.println("2. 插入 fig: " + list);// 3. 替换索引2为"kiwi"list.set(2, "kiwi");System.out.println("3. 替换 kiwi: " + list);// 4. 删除索引4list.remove(4);System.out.println("4. 删除索引4: " + list);// 5. 查找"date"的索引int indexOfDate = list.indexOf("date");System.out.println("5. date的索引: " + indexOfDate + " | 当前列表: " + list);// 6. 在索引0插入"apple"list.add(0, "apple");System.out.println("6. 头部插入apple: " + list);// 7. 查找最后一个"apple"的索引int lastIndexOfApple = list.lastIndexOf("apple");System.out.println("7. 最后一个apple的索引: " + lastIndexOfApple + " | 当前列表: " + list);// 8. 输出列表大小int size = list.size();System.out.println("8. 列表大小: " + size);// 最终列表System.out.println("最终列表: " + list);}
}

运行结果:

注意事项:

注意在使用remove时有两个重载函数,一个是按照索引删除,一个是按照对象删除。

public class test {public static void main(String[] args) {Collection<Integer> c = new ArrayList<Integer>();c.add(1);c.add(2);c.add(3);System.out.println(c);c.remove(1);System.out.println(c);List<Integer> c1 = new ArrayList<Integer>();c1.add(1);c1.add(2);c1.add(3);boolean remove1 = c1.remove((Integer) 2);Integer remove = c1.remove(1);System.out.println(c1);}
}

3.List集合的遍历方式

        在Java中,遍历List集合主要有以下五种方式,每种方式都有其适用场景,以下只详细介绍常见的两种,因为List接口继承于单列集合接口Collection接口,所以所有的单列集合都能使用的迭代器等三种遍历方式在List中也可以使用,大家可以看博主前几期的博文Java学习Collection单列集合中的三种通用遍历方法,这三种方法这里只做代码展示。

(1). 普通for循环

for (int i = 0; i < list.size(); i++) {String item = list.get(i);System.out.println(item);
}

特点

  • 通过索引访问元素
  • 适合ArrayList等随机访问集合
  • 不适用于LinkedListget(i)效率低)
  • 可在循环内修改集合(需谨慎)

(2).ListIterator(双向迭代器)

ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {String item = lit.next();System.out.println(item);
}// 反向遍历(需先正向遍历到末尾)
while (lit.hasPrevious()) {String item = lit.previous();System.out.println(item);
}

特点

  • 支持双向遍历
  • 可添加/替换元素(lit.add()lit.set()
  • 可安全删除元素(lit.remove()

(3).单列集合的三种方式

迭代器:

Iterator<String> it = list.iterator();
while (it.hasNext()) {String item = it.next();System.out.println(item);
}

增强for循环(foreach):

for (String item : list) {System.out.println(item);
}

 forEach()方法--lambda表达式

list.forEach(item -> System.out.println(item));
// 方法引用简化
list.forEach(System.out::println);

http://www.dtcms.com/a/323173.html

相关文章:

  • Ubuntu22.04 安装vitis2023.2 卡在“Generating installed device list“.
  • 【Datawhale AI夏令营】让AI读懂财报PDF(多模态RAG)(Task 2)
  • 用 C 语言深入理解 Linux 软链接:原理、API 与编程实践
  • 【CTF】PHP反序列化基础知识与解题步骤
  • Claude Code 的核心能力与架构解析
  • Alibaba Cloud Linux 3 生成 github 公钥
  • 【Word】行中包含英文字符致使下划线加粗的解决方法
  • 3款强力的Windows系统软件卸载工具
  • 理解协议最大传输单元(MTU)和TCP 最大报文段长度(MSS)
  • 力扣热题100------70.爬楼梯
  • 从零学习three.js官方文档(一)——基本篇
  • 每日五个pyecharts可视化图表-line:从入门到精通
  • 记录一次ubuntu20.04 解决gmock not found问题的过程
  • Spring 框架中提供Aware接口,实现感知容器对象
  • 机器学习——模型的简单优化
  • CPU缓存(CPU Cache)和TLB(Translation Lookaside Buffer)缓存现代计算机体系结构中用于提高性能的关键技术
  • 盟接之桥说制造:以品质为基,消费者导向差异而生
  • Linux系统编程Day10 -- 进程管理
  • CTF常用工具汇总(二)
  • 【32】C#实战篇——两个文件夹下 相同名字的文件 进行配对(两个文件夹下的文件数量和文件类型不一定相同,所以要过滤掉我们不要的文件)
  • ArkUI中的布局组件Row(一)
  • 计算机网络1-6:计算机网络体系结构
  • 【Python 高频 API 速学 ④】
  • Office安装使用?借助Ohook开源工具?【图文详解】微软Office产品
  • 使用 Conda 安装 xinference[all](详细版)
  • 一个“加锁无效“的诡异现象
  • Java 日志从入门到精通:告别日志混乱
  • C++高性能细粒度时间跟踪实战
  • Python基础教程(五)list和tuple:深度剖析Python列表与元组的终极对决
  • PHP-单引号和双引号(通俗易懂讲解版)