
集合框架
文章平均质量分 70
用来记录和分享 “集合框架“ 相关知识点。
xing.tang
迷茫,只是因为想得太多,做得太少。
展开
-
如何正确打开 Java 集合框架
Java集合源码解析系列博客Java集合篇(1)如何正确打开Java集合框架Java集合篇(2)ArrayList解析转载请标明出处:https://blog.youkuaiyun.com/u011035026/article/details/880605471、Java集合框架的认识 我们平时写代码时候,经常会用到Java的一些集合类,但是我们有真正的人系统的认识它们吗?或者你认...原创 2020-08-11 00:12:07 · 263 阅读 · 0 评论 -
Stack 源码解析
在上篇基于数组二次封的装基础上实现一个简单栈和队列栈的定义:栈(Stack)是限定只能在一段进行插入和删除操作的线性表。进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。栈的插入操作称为“入栈”(push),栈的删除 操作称为“出栈”(pop)。栈具有后进先出(LIFO),先进后出(FILO)的特性。示意图:代码:Stack泛型接口类:/*...原创 2018-11-07 15:31:53 · 363 阅读 · 0 评论 -
Vector 源码解析
使用Java中的数组二次封装属于我们的数组实现增加元素、删除元素、修改元素、搜索元素功能。使用泛型。支持动态扩容。/** * 通过对数组封装实现自己的Array类 */public class Array<E> { //定义一个整型的一维数组的成员变量 private E[] data; //数组中元素的个数,手动去维系它原创 2018-11-07 11:25:10 · 1534 阅读 · 0 评论 -
ArrayList 源码解析
自定义循环队列思考:在上篇文章中在讨论队列的出队操作时候,其时间复杂度分析为O(n),这是因为每次出队操作会删除队列的对头,从而导致其数组后续的元素都会往前移动n-1次,那怎么样才能实现队列出队操作的时候其时间复杂度为O(1)呢?循环队列定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的一端称为队尾(Tail),允许删除的一端称为队头(Fron...原创 2018-11-07 17:09:39 · 566 阅读 · 0 评论 -
LinkedList 源码解析
利用栈判断是否有效括号问题前面三天文章咱们讨论了:基于数组的二次封装添加链接描述自定义栈和队列自定义循环队列有兴趣的同学可以去看看上面的文章,这章咱们来利用栈的知识点来分析“有效括号”这个算法题。题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意...原创 2018-11-07 17:27:59 · 726 阅读 · 0 评论 -
HashMap 源码解析(jdk1.8)
Vector简介基于数组实现,能够动态扩展。加入了同步代码块,多线程安全。源码解析package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;public class Vector...原创 2018-11-12 12:34:17 · 328 阅读 · 0 评论 -
LinkedHashMap 源码解析
1、简述LinkedHashMap 继承于 HashMap,在 HashMap 的基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致性的问题。2、归纳基于 HashMap 实现的,继承于 HashMap,有序(插序),不可重复,允许 null 键和 null 值存在。与 HashMap 的区别是,HashMap 的链表是单链表,而这里的链表是双向链表。比 HashMap 多一个 accessOrder 属性,默认 false,若为 false,遍历双向链原创 2022-03-08 17:22:20 · 468 阅读 · 0 评论 -
LruCache 源码解析
1、简述LruCahce 其 Lru 是最近最少使用算法,是包含对有限数量值的强引用的缓存。每当一个值被访问,它将被移到队尾。当缓存达到指定的数量时,位于队头的值将被移除,并且可能被 GC 回收。如果缓存的值包含需要显式释放的资源,那么需要重写 entryRemoved() 方法。如果 key 对应的缓存未命中,通过重写 create() 方法创建对应的 value。LruCache 的实现最要是借助于 LinkedHashMap 来实现的。如果对 LinkedHashMap 还不是很了解的同学可以去原创 2019-11-26 16:41:33 · 224 阅读 · 0 评论 -
Hashtable 源码解析(jdk1.8)
1、简述HashTable 是 Map 接口线程安全版本的实现类,数据结构和方法实现与 HashMap 类似,不过目前基本上被弃用。2、归纳继承 Dictionary,实现了 Map 接口,实现了 Cloneable 和 Serializable 接口,所以支持复制(拷贝)、序列化。底层是基于数组+单向链表实现的,无序,不可重复,不允许 null 键和 null 值存在。默认初始容量为11,默认负载因子为0.75,扩容时扩容为原来容量的2倍+1。采用 Synchronized 同步锁,锁方原创 2022-03-08 23:32:52 · 561 阅读 · 0 评论 -
TreeMap 源码解析
1、简述今天我们来介绍下 TreeMap,TreeMap 是基于红黑树结构实现的一种 Map。那什么又是红黑数呢?(1)每个节点必须是红色或者黑色;(2)根节点是黑色;(3)每个叶子节点(NIL 节点,空节点)是黑色的;(4)如果一个节点是红色的,则它两个字节点都是黑色的,也就是说在一条路径上不能出现相邻的两个红色节点;(5)从任一节点到每个叶子的所有路径都包含相同数目的黑色节点。如何保持红黑树特性?每当添加或删除节点后,红黑树就发生了变化,可能不再满足上述五种特性,所以为了保持红黑树以原创 2022-03-09 09:26:42 · 774 阅读 · 0 评论 -
HashSet 源码解析
1、简述本篇内容我们来聊聊我们日常开发中经常使用的一个类 HashSet,相信大家都不陌生。2、归纳继承了 AbstractSet 抽象类,实现了 Set 接口,实现了 Cloneable 和 Serializable 接口,所以支持复制(拷贝)、序列化。默认容量为16,负载因子0.75,其实内部就是包装了一个 HashMap,HashMap 的 key 放的是其存入的值,value 放的是一个 Object 对象。单线程安全,多线程不安全。3、分析3.1、成员变量public cl原创 2022-03-08 18:37:18 · 215 阅读 · 0 评论 -
LinkedHashSet 源码解析
1、简述本篇内容我们来聊聊我们日常开发中经常使用的一个类 LinkedHashSet,相信大家都不陌生。2、归纳继承于 HashSet,基于 LinkedHashMap 实现的,有序(插序),不可重复,允许 null 的存在。默认容量为16,负载因子0.75,其实内部就是包装了一个 HashMap,HashMap 的 key 放的是其存入的值,value 放的是一个 Object 对象。单线程安全,多线程不安全。3、分析由于 LinkedHashSet 源码较小,主要功能都在 Has原创 2022-03-08 19:02:40 · 364 阅读 · 0 评论 -
TreeSet 源码解析
1、简述TreeSet 底层是采用 TreeMap 实现的一种 Set 集合。2、归纳继承于 AbstractSet 抽象类,实现了 NavigableSet 接口。实现了 Cloneable 和 Serializable 接口,所以支持复制(拷贝)、序列化。底层默认基于 TreeMap 实现的,无序,不可重复,不允许 null 的存在。单线程安全,多线程不安全。3、分析由于 TreeSet 源码较小,主要功能都在 TreeMap 类已经实现,所以咱们直接看源码。public原创 2022-03-09 15:46:43 · 561 阅读 · 0 评论 -
SparseArray 源码解析
1、简述我们都知道 HashMap,它属于 java.util 包下,但是很多人可能对 SparseArray 并不是很熟悉,通俗来说 SparseArray 属于 android.util 包下,是用于 Android 平台某些情况替换 HashMap 的数据结构。更具体的来说,是用于替代 key 为 int 类型,value 为 Object 类型的 HashMap。和 ArrayMap 类似,它的实现相比于 HashMap 更加节省空间,而且由于 key 指定为 int 类型,也可以节省 int原创 2022-03-08 12:05:00 · 1705 阅读 · 0 评论 -
ArrayMap 源码解析
1、简述我们都知道 HashMap,它属于 java.util 包下,但是很多人可能对 ArrayMap 并不是很熟悉,通俗来说 ArrayMap 属于 android.util 包下,是用于 Android 平台某些情况替换 HashMap 的数据结构。使用限定:minSdkVersion 必须大于等于 19(Android 4.4)。2、归纳实现了 Map 接口。底层采用两个一维数组,第一个数组是整型数组,且有序,存储 key 对应的 hash 值,第二个数组存储 key 和 value原创 2022-03-09 17:35:22 · 3008 阅读 · 0 评论 -
ArraySet 源码解析
1、简述我们都知道 HashSet,它属于 java.util 包下,但是很多人可能对 ArraySet 并不是很熟悉,通俗来说 ArraySet 属于 android.util 包下,是用于 Android 平台某些情况替换 HashSet 的数据结构。使用限定:minSdkVersion 必须大于等于 23(Android 6.0)。2、归纳实现了 Collection 和 Set 接口。底层采用两个一维数组,第一个数组是整型数组,且有序,存储 key 对应的 hash 值,第二个数组存原创 2022-03-09 18:00:39 · 3479 阅读 · 0 评论