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

java集合类的底层类是哪个

Git
程序员面试资料大全|各种技术书籍等资料-1000G

Java集合类
Collection接口
Map接口
List接口
Set接口
Queue/Deque接口
ArrayList
底层: 动态数组
LinkedList
底层: 双向链表
Vector
底层: 动态数组
HashSet
底层: HashMap
Value为常量对象
LinkedHashSet
底层: LinkedHashMap
TreeSet
底层: TreeMap
PriorityQueue
底层: 数组实现的堆
ArrayDeque
底层: 循环数组
HashMap
JDK8+: 数组+链表/红黑树
LinkedHashMap
继承HashMap, 加双向链表保序
TreeMap
底层: 红黑树
Hashtable
底层: 数组+链表
ConcurrentHashMap
JDK8+: 数组+链表/红黑树
CAS + synchronized

详细解析

一、Collection 系列
1. List (有序、可重复)
  • ArrayList

    • 底层动态数组 (Object[] elementData)
    • 特点:随机访问快(O(1)),尾部插入快;但在中间插入或删除元素时,需要移动后续所有元素,效率低(O(n))。需要扩容。
  • LinkedList

    • 底层双向链表
    • 特点:由一系列节点通过指针连接而成。每个节点(Node<E>)包含实际元素(item)、指向前一个节点的引用(prev)和指向后一个节点的引用(next)。
    • 特点:插入和删除快(O(1)),只需要修改指针;但随机访问慢(O(n)),需要从头或尾遍历。
  • Vector

    • 底层:和 ArrayList 一样,也是动态数组
    • 特点:它是线程安全的(几乎所有方法都用 synchronized 修饰),但因此性能较差。现在已很少使用,通常用 Collections.synchronizedListCopyOnWriteArrayList 替代。
2. Set (无序、不可重复)

Set 的底层实现基本都是基于对应的 Map,其元素就是 Map 的 Key,而 Value 则是一个统一的 PRESENT 常量对象。

  • HashSet

    • 底层:基于 HashMap 实现。
    • 特点:无序,允许一个 null 元素。查询效率非常高(O(1))。
  • LinkedHashSet

    • 底层:继承自 HashSet,但内部通过 LinkedHashMap 实现。
    • 特点:既保证了元素的唯一性,又维护了元素的插入顺序
  • TreeSet

    • 底层:基于 TreeMap(红黑树)实现。
    • 特点:元素可以按照自然顺序或者自定义的比较器(Comparator)进行排序
3. Queue/Deque (队列)
  • PriorityQueue
    • 底层基于数组实现的二叉堆(通常是小顶堆)。
    • 特点:元素根据优先级出队,而不是插入顺序。
  • ArrayDeque
    • 底层循环数组
    • 特点:作为栈或队列使用时,性能通常优于 StackLinkedList

二、Map 系列 (键值对)
  • HashMap (最常用)

    • JDK 1.7 底层数组 + 链表
    • JDK 1.8+ 底层数组 + 链表 / 红黑树
      • 当链表长度超过阈值(默认为8)时,会将链表转换为红黑树,以提高查询效率(O(log n))。
      • 当红黑树节点数小于阈值(默认为6)时,会退化为链表。
    • 特点:允许 null key 和 null value,无序,非线程安全。
  • LinkedHashMap

    • 底层:继承自 HashMap,在其数组+链表/红黑树的基础上,额外维护了一个双向链表来记录元素的插入顺序或访问顺序。
    • 特点:可以保持元素的插入顺序或实现 LRU(最近最少使用) 缓存。
  • TreeMap

    • 底层红黑树
    • 特点:Key 可以根据自然顺序或比较器进行排序
  • Hashtable

    • 底层:和 JDK7 的 HashMap 类似,是数组+链表
    • 特点线程安全(方法用 synchronized 修饰),但性能差。不允许 null key 和 value。是遗留类,不推荐使用。
  • ConcurrentHashMap

    • 底层:在 JDK8 之后,和 HashMap 一样,采用 数组 + 链表 / 红黑树
    • 特点线程安全,但实现机制更优。它使用 CAS + synchronized(只锁住数组的某一个桶(链表或树))来保证并发安全,性能远高于 Hashtable
集合类底层数据结构特点
ArrayList动态数组查询快,增删慢(中间)
LinkedList双向链表增删快,查询慢
HashSet基于HashMap无序,唯一
HashMap数组 + 链表 / 红黑树键值对,无序,高效
LinkedHashMapHashMap + 双向链表保持插入或访问顺序
TreeMap红黑树Key 可排序
ConcurrentHashMap数组 + 链表 / 红黑树线程安全HashMap

程序员面试资料大全|各种技术书籍等资料-1000G
Git

在这里插入图片描述

http://www.dtcms.com/a/473787.html

相关文章:

  • Arbess从入门到实战(13) - 使用Arbess+GitLab+Gradle实现Java项目自动化部署
  • 类与对象--2
  • socket 传输结构体数据,另一端进行恢复
  • 2025年数据治理平台解决方案:让数据真正可用、可信、可运营
  • 网站建设公司 长春广州购物网站建设
  • Linux ARM QT FrameBuffer
  • 静态网站特点阿里云wordpress在哪里设置
  • MATLAB完整问卷调查数据分析(附完整代码)
  • Claude Code学习笔记(四)-助你快速搭建首个Python项目
  • 济南 制作网站 公司哪家好文登seo排名
  • Chrome 插件开发入门
  • 天津专业网站制作wordpress 多域名登陆
  • Docker简介及部署
  • 字符数组和字符串
  • 【TIDE DIARY 3】dify: chatflow; docker: exec
  • Docker Compose学习
  • 从iBizPMS到iBizPLM:一场研发管理平台的四年级架构革命
  • KingbaseES SQL Server模式扩展属性管理:三大存储过程实战指南
  • 5118网站怎么做的登录贵州省住房和城乡建设厅网站
  • 开源 C++ QT QML 开发(十六)进程--共享内存
  • 密码学系列 - 零知识证明(ZKP) - MSM运算
  • 厦门网站制作推广友链是什么
  • 大的网站建设公司好赣州章贡区最新招聘信息
  • 总结Vue.js等成功项目的生态建设经验
  • 西安北郊网站开发wordpress上传附件
  • mysql读写分离中间件——Atlas详解
  • jndi使用druid,在tomcat中配置druid监控
  • tomcat 默认编码的设置
  • 【mybatisPlus详解】
  • 回归与分类算法全解析:从理论到实践