首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Java 集合
有个程序员
创建于2021-05-12
订阅专栏
Java 集合包源码分析
暂无订阅
共10篇文章
创建于2021-05-12
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Hashtable 源码解析
重要且影响性能的参数:初始容量和负载因子。 容量是哈希表中存储桶的数量,初始容量只是创建哈希表时的容量。 负载因子是在自动增加哈希表容量之前允许哈希表元素与全部容量的占比。默认是 0.75。 是线程同步的,具备一定的线程安全的。需要高并发的话,还是建议 ConcurrentHa…
LinkedHashMap 源码解析
LinkedHashMap 继承自 HashMap,像是 put、get、扩容等操作都是沿袭自父类。 只是在此基础上,重写了对相关结点的钩子方法,去构建了结点的双向链表。 这样做的目的,就是为了维护可预测的结点遍历顺序。 这种遍历顺序默认是结点的插入顺序(当 key 已存在的情…
PriorityQueue 源码解析
不允许 null。 基于小顶堆的无界优先级队列,顶=队头。 顺序遍历可以使用 Arrays.sort(pq.toArray())。 线程不安全,同步可使用 PriorityBlockingQueue。 固定时间的检索方法( peek、element、size )。 初始容量为 …
ArrayDeque 源码解析
环形队列。 指定容量时,因为是环形队列,所以数组末尾必须有个空位,用作头尾判空或满的依据。 保存双端索引:head 和 tail。 默认扩容容量:(oldCapacity < 64) ? (oldCapacity + 2) : (oldCapacity >> 1)。 …
LinkedList 源码
由于是链表,所以不存在扩容上的问题。 元素允许为 null。 不支持随机访问。 同时实现 List 和 Deque,具备列表和双写队列的作用。 非线程安全。可使用 Collections.synchronizedList 包装为线程安全列表。 双向链表的节点,基础数据结构。 指…
拆行解码 Java 集合源码之 ArrayList
允许元素为 Null。 非线程安全。可使用 Collections.synchronizedList 包装为线程安全列表。 支持随机访问,通过元素索引:RandomAccess 接口标识(无任何方法,仅做标识)。 Collections.binarySearch() 对于传入的…
拆行解码 Java 集合源码之 HashMap
Key、Value 允许为 null。 希望 key 是不可变对象, 即 hashcode 不变。 不同步,线程不安全。同步使用包装类:Collections.synchronizedMap。 假设 Hash 函数将元素正确分散在 bucket 中,则此实现为基本操作(get …
拆行解码 Java 集合源码之迭代器
还有一个接口 Iterator,每个集合类内部通过实现该接口,实现集合元素的遍历。将遍历序列的操作与序列底层的结构分离。 所以迭代器对象是在容器中进行实现的(内部类)。 迭代的时候只能进行删除(可选操作)。 (1)foreach主要是针对数组或任何实现 Iterable 接口的…
拆行解码 Java 集合源码之 Collection 的三大体系
可以根据索引访问元素。 提供额外支持插入和双写遍历的 ListIterator,允许从指定位置开始遍历。 提供静态工厂方法,用于创建视图List。来源于 ImmutableCollections。 不可增删改。 元素不能为 Null。 顺序与原数组或集合一致。 equals 判…
拆行解码 Java 集合源码之总览
Collection 和 Map 是 Java 集合最顶层的接口或者概念,无论是集合包还是并发包,都基于此。 不可存储基本类型。 Set:是否有序,看具体实现。元素唯一,判断依据:HashCode、Equals List:有序集合,元素不唯一。 List 可以精确控制插入的位置…