Java 集合源码剖析

目录

1. List

2. Map

3. Set

4. Queue/Deque

5. Stack

ArrayList

624A279A-ED52-4EF9-BCD9-1A9375935E3B.jpg
583929F3-9083-4A2F-9765-F1D2DFE9F761.jpg
List<String> list = Collections.singletonList("2333");
// UnsupportedOperationException
list.add("233");

Vector

  • 1.初始化容量量为 10,扩容时加倍
  • 2.加锁的 ArrayList

Stack

  • 1.继承⾄至 Vector,但初始容量量为空
  • 2.peek/pop 数组为空会抛异常

LinkedList

93B51565-3A4D-47F7-A40C-61533E62BF5A.jpg

HashMap

F9AFA52D-BD04-4582-9F69-19D89516ED53.jpg

Hashtable

  • 1.初始容量量 11,线程安全
  • 2.put 时 key/value 不不可为空,不不然 NPE
  • 3.取 index = (hash&0x7FFFFFFF)%tab.length
  • 4.扩容是 x2+1

LinkedHashMap

  • 1.继承⾄至 HashMap,维护插⼊入顺序,也可实现 LRU 策略略
  • 2.get ⽅方法的实现

HashSet

  • 1.在其构造⽅方法中 new HashMap 来实现
  • 2.add/contains

CopyOnWriteArrayList

  • 1.线程安全的 ArrayList,适合读多写少的场景
  • 2.实现:synchronized + 数组拷⻉贝 + volatile

ConcurrentHashMap

  • 1.线程安全的 HashMap,新增转移节点保证扩容安全
  • 2.put 时通过 CAS + ⾃自旋 + synchronized 保证线程安全

LinkedBlockingQueue

  • 1.实现了了 BlockingQueue 接⼝口,在 Queue 接⼝口上增加了了阻塞的概念
  • 2.链表存储 + ReentrantLock

SparseArray

F17E808B-5C5B-4D76-9378-21BC21F548D4.jpg

ArrayMap

CB435144-70B2-4466-96B6-861F74D382DF.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容