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

相关推荐
韩立学长11 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
风筝在晴天搁浅11 小时前
hot100 78.子集
java·算法
froginwe1111 小时前
Scala 循环
开发语言
m0_7066532311 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你9112 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu12 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
qq_4232339012 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_7155753412 小时前
分布式任务调度系统
开发语言·c++·算法
Configure-Handler12 小时前
buildroot System configuration
java·服务器·数据库
csbysj202012 小时前
选择(Selectable)
开发语言