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(...) 间接实现。

使用示例

相关推荐
阳区欠28 分钟前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs40 分钟前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
晨曦中的暮雨2 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
七老板的blog2 小时前
当 Spring StateMachine 遇见大模型:构建工业级 AI 写作流水线
java·人工智能·spring
小小编程路2 小时前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
qeen872 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
云烟成雨TD2 小时前
Spring AI 1.x 系列【46】MCP Security 模块
java·人工智能·spring
CRMEB系统商城2 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
sinat_255487812 小时前
第七部分。介绍MVC(模型-视图-控制器)模式
java·ide·http·tomcat·intellij-idea
动能小子ohhh3 小时前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi