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 数组 + 链表 / 红黑树 键值对,无序,高效
LinkedHashMap HashMap + 双向链表 保持插入或访问顺序
TreeMap 红黑树 Key 可排序
ConcurrentHashMap 数组 + 链表 / 红黑树 线程安全HashMap

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

相关推荐
玄同7656 分钟前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
岁岁种桃花儿11 分钟前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务
Word码14 分钟前
[C++语法] 继承 (用法详解)
java·jvm·c++
Yorlen_Zhang16 分钟前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
lxl130717 分钟前
C++算法(1)双指针
开发语言·c++
TT哇20 分钟前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
逝水如流年轻往返染尘23 分钟前
Java中的数组
java
不绝19129 分钟前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
无小道34 分钟前
Qt-qrc机制简单介绍
开发语言·qt
java1234_小锋39 分钟前
Java高频面试题:BIO、NIO、AIO有什么区别?
java·面试·nio