深入解析 Java 集合框架:从底层原理到实战优化

‌Java集合是用于存储和管理一组对象的容器框架,主要分为单列集合(Collection)和双列集合(Map)两大类。‌ Collection包括List(有序可重复)、Set(无序不可重复)和Queue(队列),Map则通过键值对存储数据。核心实现类如ArrayList、LinkedList、HashSet、HashMap等,分别适用于不同场景。‌‌

一、Java 集合框架架构

Java 集合框架主要由以下几个部分组成:

  1. 核心接口
    • Collection:存储单个元素的根接口
    • List:有序、可重复的集合
    • Set:无序、不可重复的集合
    • Queue:队列接口
    • Deque:双端队列接口
    • Map:存储键值对的映射接口
  2. 实现类
    • ArrayList、LinkedList、Vector、Stack(List 接口实现)
    • HashSet、LinkedHashSet、TreeSet(Set 接口实现)
    • PriorityQueue、ArrayDeque(Queue 接口实现)
    • HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap(Map 接口实现)
  3. 工具类
    • Collections:提供静态方法操作集合
    • Arrays:提供静态方法操作数组
    • Comparator:自定义排序接口
    • Comparable:自然排序接口
  4. 集合架构图

二、Collection 接口详解

1. 核心方法
  • add(E e):添加元素
  • remove(Object o):删除元素
  • contains(Object o):检查是否包含元素
  • size():返回元素数量
  • isEmpty():检查集合是否为空
  • iterator():返回迭代器
  • clear():清空集合
  • toArray():转换为数组
2. 继承体系
  • List 接口:有序、可重复
  • Set 接口:无序、不可重复
  • Queue 接口:队列特性(FIFO)
  • Deque 接口:双端队列特性

三、List 接口实现类

1. ArrayList
  • 底层实现:动态数组
  • 扩容机制:初始容量 10,扩容为原容量的 1.5 倍
  • 性能分析
    • 随机访问:O (1)
    • 插入末尾:平均 O (1),扩容时 O (n)
    • 插入中间:O (n)(需要移动元素)
    • 删除:O (n)(需要移动元素)
  • 线程安全:非线程安全
  • 最佳实践
    // 指定初始容量避免频繁扩容
    List<String> list = new ArrayList<>(100);
    
2. LinkedList
  • 底层实现:双向链表
  • 性能分析
    • 随机访问:O (n)
    • 插入末尾:O (1)
    • 插入中间:O (1)(已知位置)
    • 删除:O (1)(已知位置)
  • 线程安全:非线程安全
  • 优势:实现了 List 和 Deque 接口,可作为队列、栈使用
  • 最佳实践
    // 作为队列使用
    Deque<String> queue = new LinkedList<>();
    queue.offer("element"); // 入队
    String element = queue.poll(); // 出队
    
3. Vector
  • 底层实现:动态数组
  • 扩容机制:初始容量 10,扩容为原容量的 2 倍
  • 线程安全:所有方法同步,线程安全但性能较低
  • 替代方案:ArrayList + Collections.synchronizedList()
  • 最佳实践
    // 使用ArrayList替代Vector
    List<String> list = Collections.synchronizedList(new ArrayList<>());
    
4. Stack
  • 底层实现:继承自 Vector
  • 特点:后进先出(LIFO)
  • 线程安全:线程安全但性能较低
  • 替代方案:ArrayDeque(非线程安全)或使用同步包装
  • 最佳实践
    // 使用ArrayDeque替代Stack
    Deque<String> stack = new ArrayDeque<>();
    stack.push("element"); // 入栈
    String element = stack.pop(); // 出栈
    

四、Set 接口实现类

1. HashSet
  • 底层实现:基于 HashMap 实现
  • 特点
    • 不允许重复元素
    • 无序
    • 允许 null 元素
  • 性能分析
    • 插入、删除、查找:平均 O (1),最坏 O (n)(哈希冲突严重)
  • 线程安全:非线程安全
  • 最佳实践
    // 自定义类需要重写hashCode()和equals()方法
    class Person {
        pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值