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

使用示例

相关推荐
木辰風5 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
2501_944525545 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
heartbeat..5 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
5 小时前
java关于内部类
java·开发语言
好好沉淀5 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin5 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder5 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
lsx2024065 小时前
FastAPI 交互式 API 文档
开发语言
吨~吨~吨~5 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟5 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端