Java 集合入门:Collection & List 接口超详细讲解

🏠个人主页:黎雁

🎬作者简介:C/C++/JAVA后端开发学习者

❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、数据结构与算法(JAVA)、游戏、规划、程序人生

✨ 从来绝巘须孤往,万里同尘即玉京

文章目录

  • [Java 集合入门:Collection & List 接口超详细讲解 📝](#Java 集合入门:Collection & List 接口超详细讲解 📝)
    • [📝 文章摘要](#📝 文章摘要)
    • [🧠 前置知识回顾](#🧠 前置知识回顾)
  • [一、Collection 单列集合顶层接口 🏛️](#一、Collection 单列集合顶层接口 🏛️)
    • [1. 概述](#1. 概述)
    • [2. 常用成员方法(必背表格)](#2. 常用成员方法(必背表格))
    • [3. 代码示例 + 细节讲解(逐行注释)](#3. 代码示例 + 细节讲解(逐行注释))
    • [4. 超重要细节 💡](#4. 超重要细节 💡)
  • [二、List 集合:有序、有索引、可重复 📌](#二、List 集合:有序、有索引、可重复 📌)
    • [1. List 概述](#1. List 概述)
    • [2. List 独有的索引方法(必背)](#2. List 独有的索引方法(必背))
    • [3. 代码示例 + 易错点深度讲解](#3. 代码示例 + 易错点深度讲解)
    • [4. List 两个 remove 方法区别 ⚠️](#4. List 两个 remove 方法区别 ⚠️)
  • [📌 全篇核心知识点总结(干货速记)](#📌 全篇核心知识点总结(干货速记))
    • [✍️ 写在最后](#✍️ 写在最后)

Java 集合入门:Collection & List 接口超详细讲解 📝

单列集合最核心基础,吃透顶层接口,后面学 Set、Map 都轻松!

📝 文章摘要

  • 阅读时长:10 分钟
  • 适合人群 :
    1. Java 集合零基础初学者 → 重点看:Collection 接口方法、List 特点、代码示例
    2. 正在学习 ArrayList/LinkedList 的同学 → 重点看:通用方法、索引操作、方法重载坑点
    3. 准备面试/期末考试的同学 → 重点看:Collection 常用方法、List 三大特征、contains 原理
    4. 写 CSDN 技术博客做笔记的同学 → 重点看:结构清晰、细节标注、代码注释完整
  • 本文内容:全覆盖 Collection 顶层接口常用方法、List 接口特点与索引方法,附带完整 Java 代码、细节讲解、易错点分析,全程通俗易懂,适合快速入门与复习。

🧠 前置知识回顾

在学习集合之前,我们已经掌握:

  1. Java 面向对象、继承、多态、接口
  2. 泛型基本知识(必须掌握,否则集合会很痛苦)
  3. 数组的使用与优缺点(长度固定、类型固定)
  4. equals 方法的重制与作用

集合就是来解决数组不够灵活 的问题,而 Collection 是所有单列集合的顶层父接口。


一、Collection 单列集合顶层接口 🏛️

1. 概述

  • Collection 是 所有单列集合的顶层接口。
  • 凡是单列集合(List、Set)都直接或间接继承自它。
  • 它是一个 接口 ,不能直接实例化,只能使用 多态 创建其实现类对象(如 ArrayList)。

2. 常用成员方法(必背表格)

方法名 说明
public boolean add(E e) 向集合尾部添加元素 e
public boolean addAll(Collection<? extends E> c) 把另一个集合 c 的元素全部添加进来
public void clear() 清空集合中所有元素
public boolean remove(Object obj) 删除集合中 第一个 出现的 obj
public boolean removeAll(Collection<?> c) 删除当前集合中所有属于 c 的元素
public boolean retainAll(Collection<?> c) 只保留当前集合中属于 c 的元素
public boolean contains(Object obj) 判断集合是否包含某个元素 obj
public boolean isEmpty() 判断集合是否为空
public int size() 获取集合中元素个数

3. 代码示例 + 细节讲解(逐行注释)

java 复制代码
import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo01 {
    public static void main(String[] args) {
        // Collection 是接口,不能直接 new,使用多态
        Collection<String> coll = new ArrayList<>();

        // 1. add 添加元素
        // List 集合永远返回 true(允许重复)
        // Set 集合重复则返回 false(不允许重复)
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        System.out.println(coll); // [aaa, bbb, ccc]

        // 2. clear 清空集合
        // coll.clear();

        // 3. remove 删除元素
        // Collection 只能根据 **对象** 删除,不能按索引删
        // 存在返回 true,不存在返回 false
        coll.remove("aaa");
        System.out.println(coll); // [bbb, ccc]

        // 4. contains 判断是否包含
        // 底层依赖 equals()
        // 存自定义对象必须重写 equals,否则按地址比较
        boolean contains1 = coll.contains("bbb"); // true
        boolean contains2 = coll.contains("aaa"); // false
        System.out.println(contains1);
        System.out.println(contains2);

        // 5. isEmpty 判断是否为空
        boolean empty = coll.isEmpty(); // false
        System.out.println(empty);

        // 6. size 获取元素个数
        int size = coll.size(); // 2
        System.out.println(size);
    }
}

4. 超重要细节 💡

  1. Collection 不能按索引删除,因为它是顶层接口,并非所有子集合都有索引(如 Set)。
  2. contains 底层依赖 equals()
    • 存储自定义对象时,必须重写 equals()
    • 否则默认使用 Object 的 equals(),按地址比较,不是按内容比较。
  3. add 方法返回值:
    • List:永远 true(可重复)
    • Set:重复返回 false,不重复返回 true。

二、List 集合:有序、有索引、可重复 📌

1. List 概述

  • List 继承自 Collection,拥有 Collection 所有方法。
  • List 三大特点:
    1. 有序:存储顺序 = 取出顺序
    2. 有索引:可以通过索引操作元素
    3. 可重复:允许存储重复元素

2. List 独有的索引方法(必背)

因为 List 有索引,所以多了 4 个高频方法:

方法名 说明
public void add(int index, E element) 在指定索引 index 处插入元素
public E remove(int index) 删除指定索引处元素,返回被删除元素
public E set(int index, E element) 修改指定索引处元素,返回被修改元素
public E get(int index) 获取指定索引处的元素

3. 代码示例 + 易错点深度讲解

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class ListDemo01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list); // [aaa, bbb, ccc]

        // 1. 指定索引添加
        list.add(1, "QQQ");
        System.out.println(list); // [aaa, QQQ, bbb, ccc]

        // 2. remove 根据索引删除元素
        // 返回被删除的元素
        String removed = list.remove(0);
        System.out.println("被删除的元素:" + removed); // aaa
        System.out.println(list); // [QQQ, bbb, ccc]

        // ==============================================
        // ⚠️ 重点坑点:两个 remove 方法的重载问题
        List<Integer> list2 = new ArrayList<>();
        list2.add(1);
        list2.add(2);
        list2.add(3);

        // list2.remove(1);
        // 这里会调用 remove(int index),不是自动装箱!
        // 方法重载:优先调用参数类型完全匹配的方法

        // 正确删除元素 1 的写法:手动装箱
        Integer target = Integer.valueOf(1);
        list2.remove(target);
        System.out.println(list2); // [2, 3]
        // ==============================================

        // 3. set 修改指定索引元素
        // 返回被覆盖的旧元素
        String oldVal = list.set(0, "aaa");
        System.out.println("被修改的元素:" + oldVal); // QQQ
        System.out.println(list); // [aaa, bbb, ccc]

        // 4. get 获取指定索引元素
        String s = list.get(2);
        System.out.println("索引2的元素:" + s); // ccc
    }
}

4. List 两个 remove 方法区别 ⚠️

这是 面试 + 考试高频坑点:

  1. E remove(int index)
    • 按索引删
    • 返回被删元素
  2. boolean remove(Object o)
    • 按元素删
    • 返回是否删除成功

重点:

调用 list.remove(1) 时,因为 方法重载 ,会优先走 remove(int index),不会自动装箱!

想删除元素 1,必须手动装箱:

java 复制代码
list.remove(Integer.valueOf(1));

📌 全篇核心知识点总结(干货速记)

  1. Collection:

    • 单列集合顶层接口
    • 不能直接实例化,用多态
    • 核心方法:add、remove、contains、clear、isEmpty、size
    • contains 依赖 equals,自定义对象必须重写 equals
  2. List:

    • 继承 Collection
    • 特点:有序、有索引、可重复
    • 独有索引方法:add、remove、set、get
    • 两个 remove 方法重载是高频坑点
    • 删除数字元素必须手动装箱

✍️ 写在最后

Collection 与 List 是 Java 集合体系的基石。

  • Collection 定义了所有单列集合的通用行为
  • List 定义了有序、可重复、有索引的集合规范

掌握今天的内容,你就可以顺畅学习:

  • ArrayList
  • LinkedList
  • Vector
  • 以及后续的 Set、Map 系列

集合是 Java 基础 重中之重,建议多敲代码、多记细节。

觉得本文清晰、细节足、适合初学者,欢迎 点赞 👍 收藏 💾 关注,后续持续更新 Java 集合系列高质量博客!

相关推荐
IT枫斗者枫哥37 分钟前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟37 分钟前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo38 分钟前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕38 分钟前
Hutool之RandomUtil:随机数生成的终极利器
java·后端
花开路口38 分钟前
深入理解 Java/Kotlin 协变与逆变
java·kotlin
运行时异常39 分钟前
【WMS 仓储系统集成 AI Agent 实战】第 7 讲:Vue3 前端工程化——Token 刷新锁、Markdown 渲染踩坑与权限体系
java
她的男孩40 分钟前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构
天天被压力1 小时前
【Python 量化取数指南 #13】Python 把行情落库:sqlite 一键存,回测随用随取
java·人工智能·python
天天被压力1 小时前
【Python 量化取数指南 #14】Python 清洗行情数据:复权停牌对齐,回测不翻车
java·人工智能·python
独泪了无痕1 小时前
开发利器Hutool之MapUtil的使用
java·后端