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

相关推荐
Hoking3 小时前
LangChain4j集成SpringBoot接入百炼大模型(Qwen)
java·人工智能·spring boot·llm
浪里小白龙593 小时前
零信任平台接入芋道框架
java
代码匠心4 小时前
从零开始学Flink:流批一体的执行模式
java·大数据·后端·flink·大数据处理
一只程序烽.4 小时前
java项目使用宝塔面板部署服务器nginx不能反向代理找到图片资源
java·服务器·nginx
小黄人软件4 小时前
用AI写的【实时文件搜索引擎】python源码【找资源】
开发语言·python·搜索引擎
Deryck_德瑞克4 小时前
IDEA编译时报错OOM的解决方案
java·ide·intellij-idea
JH30734 小时前
Idea中新建package包,变成了Directory
java·ide·intellij-idea
光影少年4 小时前
rust生态及学习路线,应用领域
开发语言·学习·rust
_extraordinary_4 小时前
Java SpringMVC(三)--- SpringMVC,SpringIoC&DI
java·开发语言