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

使用示例

相关推荐
一方热衷.41 分钟前
YOLO26-Seg ONNXruntime C++/python推理
开发语言·c++·python
靓仔建2 小时前
Vue3导入组件出错does not provide an export named ‘user_setting‘ (at index.vue:180:10)
开发语言·前端·typescript
HalvmånEver2 小时前
7.高并发内存池大页内存申请释放以及使用定长内存池脱离new
java·spring boot·spring
凤山老林2 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
赶路人儿3 小时前
UTC时间和时间戳介绍
java·开发语言
dreamread3 小时前
【SpringBoot整合系列】SpringBoot3.x整合Swagger
java·spring boot·后端
6+h3 小时前
【java】基本数据类型与包装类:拆箱装箱机制
java·开发语言·python
一直都在5723 小时前
Spring面经
java·后端·spring
xiaoye37083 小时前
如何在Spring中使用注解配置Bean的生命周期回调方法?
java·spring
闻哥4 小时前
深入Redis的RDB和AOF两种持久化方式以及AOF重写机制的分析
java·数据库·spring boot·redis·spring·缓存·面试