还搞不懂集合?一张图带你吃透 ArrayList、HashMap、ConcurrentHashMap 的底层原理(附7张流程图) 还搞不懂集合?一张图带你吃透 ArrayList、HashMap、ConcurrentHashMap 的底层原理(附7张流程图)目录一、集合框架概览二、List 集合2.1 ArrayList2.2 LinkedList2.3 ArrayList 与 LinkedList 对比三、Set 集合3.1 HashSet3.2 TreeSet3.3 LinkedHashSet四、Map 集合4.1 HashMap 的底层原理4.2 TreeMap4.3 LinkedHashMap五、线程安全的集合六、遍历集合的方式对比七、实际应用场景与选型总结一、集合框架概览集合框架是 Java 里最常用的东西,说白了就是用来存数据、取数据的一套工具。Java 集合主要分为两大接口:Collection:存储单个元素List:有序可重复 — ArrayList、LinkedListSet:无序不可重复 — HashSet、TreeSet、LinkedHashSetMap:存储键值对 — HashMap、TreeMap、LinkedHashMap、Hashtable// 集合框架的继承关系(简化版)Collection├──List(有序,可重复) │ ├──ArrayList—— 数组,查快 │ └──LinkedList—— 链表,插删快 │ ├──Set(无序,不可重复) │ ├──HashSet—— 哈希表,最快 │ ├──TreeSet—— 红黑树,自动排序 │ └──LinkedHashSet—— 链表+哈希,按插入顺序Map(键值对) ├──HashMap—— 数组+链表+红黑树(重要) ├──TreeMap—— 红黑树,Key自动排序 ├──LinkedHashMap—— 链表+哈希,按插入顺序 └──Hashtable—— 线程安全,但基本被淘汰了注:上面这些类的底层实现,面试基本都会问。整体关系图:Map 接口(键值对)Collection 接口List 接口有序、可重复Set 接口无序、不可重复MapArrayList底层: Object[] 数组LinkedList底层: 双向链表Vector线程安全(已淘汰)HashSet底层: HashMapTreeSet底层: TreeMap(红黑树)LinkedHashSet底层: LinkedHashMapHashMapTreeMap底层: 红黑树LinkedHashMap底层: HashMap + 双向链表Hashtable线程安全(已淘汰)二、List 集合List 的特点:有序、可重复,通过索引操作元素。2.1 ArrayList底层是Object[] 数组。特点:查快(O(1)),插删慢(要搬数据)。ListStringlist=newArrayList();list.add("hello");list.add("world");list.add(1,"java");// 指定位置插入,后面的元素往后挪list.remove("hello");// 按元素删list.remove(0);// 按索引删System.out.println(list.get(0));// 通过索引取值扩容机制:ArrayList 底层数组默认容量是10(JDK 8)。满了之后会自动扩容——每次扩成原来的1.5 倍。// 源码简化版(ArrayList.grow)intnewCapacity=oldCapacity+(oldCapacity1);// oldCapacity * 1.5如果你知道大概要存多少数据,创建 ArrayList 的时候直接指定初始容量,避免频繁扩容。(new ArrayList(1000))ArrayList 扩容流程图: