Java进阶篇1-3:集合框架(单列集合)

1 认识集合及 Collection

1.1 集合体系

集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。

集合体系如下:

1.2 认识 Collection

1.2.1 常用功能

Collection 是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。

一句话记忆:"增删 查含 判空 长;清空 转数组"

1.2.2 3种遍历方式

第一种遍历方式:迭代器遍历

迭代器是用来遍历集合的专用方式(数组没有迭代器),在 Java 中迭代器的代表是 Iterator。

第二种遍历方式:增强for循环

第三种遍历方式:Lambda 表达式 :得益于 JDK 8 开始的新技术 Lambda 表达式,提供了一种更简单、更直接的方式来遍历集合。

1.2.3 三种遍历方式的区别

遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。

错误示例(增强 for 循环):

java 复制代码
ArrayList<String> list = new ArrayList<>();
list.add("Java入门");
list.add("宁夏枸杞");
list.add("黑枸杞");
list.add("人字拖");

for (String s : list) {
    if (s.contains("枸杞")) {
        list.remove(s);   // 抛出 ConcurrentModificationException
    }
}
  • 如果集合支持索引,可以使用for循环遍历,每删除数据后做i--;或者可以倒着遍历
java 复制代码
普通 for 循环 + 索引回退(i--)
for (int i = 0; i < list.size(); i++) {
    String name = list.get(i);
    if (name.contains("枸杞")) {
        list.remove(name);
        i--;   // 删除后索引回退,防止漏删
    }
}
倒序遍历
for (int i = list.size() - 1; i >= 0; i--) {
    String name = list.get(i);
    if (name.contains("枸杞")) {
        list.remove(name);
    }
}
  • 可以使用迭代器遍历,并用迭代器提供的删除方法删除数据。、
java 复制代码
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String name = it.next();
    if (name.contains("枸杞")) {
        it.remove();   // 使用迭代器自己的删除方法,安全
    }
}
  • removeIf()(Java 8+,最推荐):list.removeIf(name -> name.contains("枸杞"));
  • 注意:增强 for 循环/Lambda 遍历均不能解决并发修改异常问题,因此它们只适合做数据的遍历,不适合同时做增删操作。

2 List 集合

3 Set 集合

相关推荐
考虑考虑5 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源