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

使用示例

相关推荐
Desirediscipline7 小时前
cerr << 是C++中用于输出错误信息的标准用法
java·前端·c++·算法
Demon_Hao7 小时前
JAVA快速对接三方支付通道标准模版
java·开发语言
Renhao-Wan7 小时前
Java 算法实践(八):贪心算法思路
java·算法·贪心算法
w***71107 小时前
常见的 Spring 项目目录结构
java·后端·spring
xyq20248 小时前
C# 判断语句详解与应用
开发语言
野犬寒鸦8 小时前
深入解析HashMap核心机制(底层数据结构及扩容机制详解剖析)
java·服务器·开发语言·数据库·后端·面试
##学无止境##9 小时前
从0到1吃透Java负载均衡:原理与算法大揭秘
java·开发语言·负载均衡
梵得儿SHI9 小时前
Spring Cloud 核心组件精讲:负载均衡深度对比 Spring Cloud LoadBalancer vs Ribbon(原理 + 策略配置 + 性能优化)
java·spring cloud·微服务·负载均衡·架构原理·对比单体与微服务架构·springcloud核心组件
Desirediscipline9 小时前
#define _CRT_SECURE_NO_WARNINGS 1
开发语言·数据结构·c++·算法·c#·github·visual studio
知识即是力量ol9 小时前
多线程并发篇(八股)
java·开发语言·八股·多线程并发