java学习--Collection

一、Collection 是什么?

Collection 是 Java 集合框架的根接口 (位于 java.util 包下),它定义了一组用于操作 "一组对象"(元素)的通用方法,是所有单列集合(区别于 Map 这种键值对集合)的基础。

你可以把 Collection 理解为一个 "容器" 的通用规则:比如怎么添加元素、删除元素、判断是否包含某个元素等,而具体的容器(如列表、集合、队列)会遵循这个规则,并实现自己的特性。

二、Collection 的核心方法(通用规则)

这些方法是所有实现了 Collection 接口的类都具备的,常用的有:

方法 作用
boolean add(E e) 向集合中添加一个元素
boolean remove(Object o) 从集合中移除指定元素
boolean contains(Object o) 判断集合是否包含指定元素
int size() 返回集合中元素的个数
void clear() 清空集合中所有元素
boolean isEmpty() 判断集合是否为空
Iterator<E> iterator() 获取遍历集合的迭代器
Object[] toArray() 将集合转为数组

三、Collection 的主要子接口(常用实现类)

Collection 本身是接口,不能直接实例化,实际开发中我们使用的是它的子接口和实现类,核心子接口有 3 个:

1. List(有序、可重复)
  • 特点:元素有序 (插入顺序 = 遍历顺序)、可重复,支持通过索引访问元素。
  • 常用实现类:
    • ArrayList:底层是数组,查询快、增删慢,线程不安全(日常开发最常用)。
    • LinkedList:底层是双向链表,查询慢、增删快,线程不安全。
    • Vector:底层是数组,线程安全,但效率低(基本被淘汰)。
2. Set(无序、不可重复)
  • 特点:元素无序 (无索引)、不可重复 (依赖 equals()hashCode() 保证)。
  • 常用实现类:
    • HashSet:底层是哈希表,存取快,无序,不可重复。
    • LinkedHashSet:继承 HashSet,底层加了链表,保证元素有序(插入顺序)。
    • TreeSet:底层是红黑树,元素会自动排序(需实现 Comparable 或传入 Comparator)。
3. Queue(队列,先进先出)
  • 特点:遵循 "先进先出(FIFO)" 原则,常用于任务排队、消息处理等场景。
  • 常用实现类:
    • LinkedList:同时实现了 ListQueue,可作为队列使用。
    • PriorityQueue:优先级队列,元素按优先级排序(而非插入顺序)。

四、Collection 的基本使用示例

下面是一个简单的示例,展示 Collection 核心方法的使用(以 ArrayList 为例):

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

public class CollectionDemo {
    public static void main(String[] args) {
        // 1. 创建 Collection 实现类对象(ArrayList)
        Collection<String> collection = new ArrayList<>();

        // 2. 添加元素
        collection.add("Java");
        collection.add("Python");
        collection.add("C++");
        System.out.println("添加元素后:" + collection); // 输出:[Java, Python, C++]

        // 3. 判断元素是否存在
        boolean hasJava = collection.contains("Java");
        System.out.println("是否包含 Java:" + hasJava); // 输出:true

        // 4. 获取元素个数
        int size = collection.size();
        System.out.println("集合大小:" + size); // 输出:3

        // 5. 遍历集合(方式1:迭代器)
        Iterator<String> iterator = collection.iterator();
        System.out.print("迭代器遍历:");
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.print(element + " "); // 输出:Java Python C++
        }
        System.out.println();

        // 6. 移除元素
        collection.remove("C++");
        System.out.println("移除 C++ 后:" + collection); // 输出:[Java, Python]

        // 7. 判断是否为空
        boolean isEmpty = collection.isEmpty();
        System.out.println("集合是否为空:" + isEmpty); // 输出:false

        // 8. 清空集合
        collection.clear();
        System.out.println("清空后:" + collection); // 输出:[]
    }
}

五、关键注意点

  1. Collection泛型接口 ,使用时建议指定元素类型(如 Collection<String>),避免类型转换异常。
  2. Set 保证元素唯一的原理:添加元素时,先调用 hashCode() 计算哈希值,再调用 equals() 比较,两者都相同则视为重复元素,无法添加。
  3. 遍历 Collection 的方式:除了迭代器,还可以用增强 for 循环(for (String s : collection))或 Java 8+ 的流式遍历(collection.forEach(System.out::println))。

总结

  1. Collection 是 Java 单列集合的根接口,定义了操作元素的通用方法,不能直接实例化。
  2. 核心子接口:List(有序可重复)、Set(无序不可重复)、Queue(先进先出),各有不同的实现类适配不同场景。
  3. 常用操作:添加(add)、删除(remove)、遍历(迭代器 / 增强 for)是 Collection 最核心的使用场景,不同实现类仅在性能、有序性、唯一性上有差异。
相关推荐
heartbeat..2 小时前
Spring 全局上下文实现指南:单机→异步→分布式
java·分布式·spring·context
techdashen2 小时前
Go 1.18+ slice 扩容机制详解
开发语言·后端·golang
浙江巨川-吉鹏2 小时前
【城市地表水位连续监测自动化系统】沃思智能
java·后端·struts·城市地表水位连续监测自动化系统·地表水位监测系统
浮游本尊2 小时前
React 18.x 学习计划 - 第十二天:企业级实践与进阶主题
学习·react.js·状态模式
froginwe112 小时前
R 包:全面解析与高效使用指南
开发语言
zero.cyx2 小时前
javaweb(AI)-----后端
java·开发语言
鹿角片ljp2 小时前
Java深入理解MySQL数据库操作
java·mysql·adb
NE_STOP2 小时前
SpringBoot集成shiro
java
RemainderTime2 小时前
从零搭建Spring Boot3.x生产级单体脚手架项目(JDK17 + Nacos + JWT + Docker)
java·spring boot·架构