当前位置: 首页 > web >正文

深入解析 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)(哈希冲突严重)
    </
http://www.xdnf.cn/news/14299.html

相关文章:

  • Pytorch 卷积神经网络参数说明一
  • Python----OpenCV(图像的绘制——绘制直线,绘制矩形,绘制圆形,绘制多边形)
  • (javaSE)抽象类和接口:抽象类概念语法和特性, 抽象类的作用;接口的概念 接口特性 实现多个接口 接口间的继承 Object类
  • Qt--信号槽发送QVector
  • Relin梦中门——第二章——感官
  • jojojojojo
  • java 设计模式_行为型_15迭代器模式
  • nginx 配置返回 文件大小
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 第八章:排序
  • 高速隔直电容设计
  • 【Vue】v-model进阶+ref+nextTick
  • 计算机是怎么跑起来的第五章
  • Python3 学习(菜鸟)-02基本数据类型
  • 从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析
  • HarmonyOS 布局优化
  • 【Zephyr 系列 24】设备日志、事件与远程调试机制设计:为每一块硬件留痕,助力稳定性分析
  • Cursor ReAct Agent技术架构
  • Python爬虫实战:研究RQ库相关技术
  • Modbus原理一文通:从基础到实现的全面解析
  • Python全栈开发:前后端分离项目架构详解
  • Nginx+keepalived主从,双主架构
  • Java大模型开发入门 (10/15):连接外部世界(下) - 端到端构建完整的RAG问答系统
  • 拓展:###单向循环链表###
  • 【MFC】编辑框、下拉框、列表控件
  • JavaScript基础-常用的鼠标事件
  • Bambu Studio 中的“回抽“与“装填回抽“的区别
  • Spark RDD 及性能调优
  • 案例:塔能科技智启某市光域,勾勒城市照明宏图
  • IEEE 802.16e 标准下的LDPC 码