Java知识复习(Day1)----------------集合

一.集合体系架构

List系列集合:添加的元素是有序,可重复,有索引。

Set系列集合:添加的元素是无序,不重复,无索引。

其中Arraylist,LinkedList,Vector,HashSet,TreeSet,LinkedHashSet实现类,Collection,List,Set是接口

注意:我们在使用集合时是不能创建接口的对象的,只能创建其实现类的对象。

二.Collection常用方法解析

方法签名 说明
public boolean add(E e) 把给定的对象添加到当前集合中,成功返回 true
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象在当前集合中删除,成功返回 true
public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数 / 集合的长度

1.add方法注意事项

List 系列(允许重复)

  • 返回值永远是 true
  • 因为 List 允许存储重复元素,所以任何调用 add() 的操作都会成功,不会因为元素已存在而失败。

Set 系列(不允许重复)

  • 返回值取决于元素是否已存在
    • 如果元素不存在,添加成功 → 返回 true
    • 如果元素已存在,添加失败 → 返回 false
  • 这是因为 Set 不允许重复元素,它会通过 hashCode()equals() 来判断元素是否已经存在。

2.remove方法注意事项

要注意的是由于LIst系列集合允许重复存在,在使用remove时,并不会删除所有的

3.Contains方法注意事项

  • contains() 的底层原理 :它依赖 equals() 方法来判断对象是否相等。
  • 自定义对象的默认行为 :如果 Student 类没有重写 equals(),就会使用 Object 类的默认实现,只比较对象的内存地址
  • 实现业务判断的关键 :要让 自定义对象的比较生效,必须在 Student 类中重写 equals() 方法 (通常也会一起重写 hashCode())。

重写前:

使用idea的话可以直接生成

重写的代码

复制代码
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

再次运行

三.集合的通用遍历方式

1.迭代器遍历

获取迭代器

  • 方法Iterator<E> iterator()
  • 作用 :从 Collection 集合中获取一个迭代器对象,默认指向集合的起始位置(逻辑上的 0 索引)。
  • 说明 :所有实现了 Collection 接口的集合(如 ArrayListHashSet)都具备此方法,是遍历集合的通用方式。
方法 作用
boolean hasNext() 判断迭代器当前指向的位置是否还有元素 。有元素返回 true,没有则返回 false
E next() 获取当前位置的元素,并将迭代器移动到下一个位置

使用示例

2.增强for循环遍历

1. 本质与由来
  • 它是 JDK 5 之后引入的语法糖,底层原理就是 Iterator 迭代器,目的是简化迭代器的遍历代码。
  • 你可以把它看作迭代器的 "简化版",写法更简洁,但底层逻辑完全一致。
2. 适用范围
  • 支持所有单列集合 (如 ListSet 等实现了 Collection 接口的集合)

  • 支持所有数组

    for (元素的数据类型 变量名 : 数组或者集合) {
    // 循环体,变量名代表当前遍历到的元素
    }

使用示例

3.lambda表达式遍历

1. 本质与原理
  • 底层依赖 Iterable 接口的默认方法 forEach(Consumer<? super T> action)
  • Consumer 是一个函数式接口,正好可以用 Lambda 表达式来实现。
  • 这种方式无需手动获取迭代器或写循环结构,直接传入一个 "对每个元素要执行的操作" 即可。
2. 适用范围
  • 所有实现了 Iterable 接口的集合(包括 Collection 体系的 ListSet 等)。
  • 数组不直接支持,但可以通过 Arrays.stream(arr).forEach(...) 间接实现。

使用示例

相关推荐
腻害兔1 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel2 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience5 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao5 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099676 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能