Java的Collection 集合体系详解

在 Java 开发中,集合框架是处理数据容器的核心工具。它提供了一系列接口和类,帮助我们高效地存储、操作和管理对象集合。本文将聚焦Collection 集合体系,深入解析其核心接口与实现类。

一、集合框架概述

Java 集合框架主要分为两大体系:

  • Collection 体系 :存储单个元素的集合,包括 List(有序可重复)、Set(无序不可重复)、Queue(队列)。
  • Map 体系:存储 ** 键值对(Key-Value)** 的集合,如 HashMap、TreeMap 等。

今天我们先深入学习Collection 体系

二、Collection 接口:集合的根接口

java.util.Collection是所有单列集合的根接口,它定义了集合的通用行为,包括增删改查、遍历等操作。

1. Collection 常用方法

java 复制代码
public class CollectionDemo {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        
        // 添加元素
        coll.add("Java");
        coll.add("Python");
        coll.add("C++");
        
        // 判断是否包含元素
        System.out.println(coll.contains("Java")); // true
        
        // 删除元素
        coll.remove("C++");
        
        // 元素个数
        System.out.println(coll.size()); // 2
        
        // 转数组
        Object[] arr = coll.toArray();
        for (Object o : arr) {
            System.out.println(o);
        }
        
        // 清空集合
        coll.clear();
        System.out.println(coll.isEmpty()); // true
    }
}

三、List 接口:有序可重复的集合

List接口继承自Collection,特点是元素有序、可重复 ,且支持通过索引操作元素。常用实现类有ArrayListLinkedListVector

1. ArrayList:基于数组的动态列表

  • 底层结构:数组,查询快(随机访问)、增删慢(需移动元素)。
  • 适用场景:读多写少的场景。
java 复制代码
public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        
        // 按索引访问
        System.out.println(list.get(1)); // Banana
        
        // 按索引修改
        list.set(1, "Grape");
        System.out.println(list); // [Apple, Grape, Cherry]
        
        // 插入元素
        list.add(1, "Pear");
        System.out.println(list); // [Apple, Pear, Grape, Cherry]
    }
}

2. LinkedList:基于链表的双向列表

  • 底层结构:双向链表,查询慢(需遍历)、增删快(只需修改指针)。
  • 额外功能 :实现了Deque接口,支持队列、栈的操作(如pushpopofferpoll)。
java 复制代码
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        
        // 栈操作(先进后出)
        list.push("Top");
        System.out.println(list.pop()); // Top
        
        // 队列操作(先进先出)
        list.offer("Last");
        System.out.println(list.poll()); // A
    }
}

3. Vector:线程安全的动态列表(已过时)

  • 特点 :方法加了synchronized锁,线程安全但性能低。
  • 替代方案 :优先用ArrayList,多线程场景可结合Collections.synchronizedList()

四、Set 接口:无序不可重复的集合

Set接口继承自Collection,特点是元素无序、不可重复 (通过equals()hashCode()保证唯一性)。常用实现类有HashSetLinkedHashSetTreeSet

1. HashSet:基于哈希表的 Set

  • 底层结构:哈希表(数组 + 链表 / 红黑树),元素无序、唯一。
  • 去重原理 :先比较hashCode,再比较equals()
java 复制代码
public class HashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Java");
        set.add("Java"); // 重复元素,添加失败
        set.add("Python");
        
        System.out.println(set); // [Python, Java](无序)
    }
}

2. LinkedHashSet:有序的 HashSet

  • 底层结构 :哈希表 + 链表,元素有序(插入顺序)、唯一
  • 适用场景:需要保证插入顺序的去重场景。
java 复制代码
public class LinkedHashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("A");
        set.add("B");
        set.add("A");
        
        System.out.println(set); // [A, B](保持插入顺序)
    }
}

3. TreeSet:可排序的 Set

  • 底层结构 :红黑树,元素可排序(自然排序或自定义比较器)、唯一
  • 排序方式 :元素需实现Comparable接口,或创建TreeSet时传入Comparator
java 复制代码
public class TreeSetDemo {
    public static void main(String[] args) {
        // 自然排序(Integer实现了Comparable)
        Set<Integer> set = new TreeSet<>();
        set.add(3);
        set.add(1);
        set.add(2);
        System.out.println(set); // [1, 2, 3](自动排序)
        
        // 自定义比较器(降序)
        Set<String> strSet = new TreeSet<>((s1, s2) -> s2.compareTo(s1));
        strSet.add("C");
        strSet.add("A");
        strSet.add("B");
        System.out.println(strSet); // [C, B, A]
    }
}

五、Queue 接口:队列(先进先出)

Queue接口继承自Collection,是 先进先出的队列结构,常用实现类有LinkedList(同时实现了 List 和 Queue)、PriorityQueue(优先队列)。

java 复制代码
public class QueueDemo {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.offer("Task1"); // 入队
        queue.offer("Task2");
        queue.offer("Task3");
        
        System.out.println(queue.poll()); // Task1(出队)
        System.out.println(queue.peek()); // Task2(查看队首,不出队)
        System.out.println(queue); // [Task2, Task3]
    }
}

总结

Collection 体系是 Java 集合的基础,其中:

  • List :有序可重复,选ArrayList(读多写少)或LinkedList(增删多)。
  • Set :无序不可重复,选HashSet(性能优)、LinkedHashSet(需插入顺序)或TreeSet(需排序)。
  • Queue :先进先出,选LinkedListPriorityQueue(优先队列)。
相关推荐
q***78783 分钟前
Spring学习——新建module模块
java·学习·spring
q***11657 分钟前
在Nginx上配置并开启WebDAV服务的完整指南
java·运维·nginx
u***u68512 分钟前
PHP最佳实践
开发语言·php
是店小二呀17 分钟前
使用Rust构建一个完整的DeepSeekWeb聊天应用
开发语言·后端·rust
白起那么早19 分钟前
我又开发了一款idea插件-ContiNewGenerator
java·后端
装不满的克莱因瓶31 分钟前
【Java架构师体系课 | MySQL篇】③ Explain执行计划详解
java·数据库·mysql·架构·优化·索引·explain
王煜苏33 分钟前
最新版idea2025 配置docker 打包spring-boot项目到生产服务器全流程,含期间遇到的坑
java·docker·容器
李玮豪Jimmy1 小时前
Day18:二叉树part8(669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树)
java·服务器·算法
后端小张1 小时前
【AI 学习】AI Agent 开发进阶:架构、规划、记忆与工具编排
java·人工智能·ai·架构·系统架构·agent·智能体
西岭千秋雪_1 小时前
Kafka客户端整合
java·spring boot·分布式·kafka·linq