
集合
沐谦
这个作者很懒,什么都没留下…
展开
-
HashMap的源码分析
要想了解HashMap的源码,首先要知道它的底层结构。 jdk1.7及其之前,HashMap的底层结构采用的是数组+链表的形式。 jdk1.8以后,HashMap的底层结构采用的是数组+链表 或者数组+红黑树的方式。 定义的关键参数 // 默认的HashMap中数组的长度 16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // HashMap中的数组的最大容量 static final int MAXIMUM_C原创 2021-04-11 19:21:20 · 78 阅读 · 0 评论 -
TreeMap的源码分析
对map的源码分析要比之前的ArrayList和LinkedList分析难一些,不是因为它的代码有多难,而是它内部是依靠红黑树来实现的。如果不了解红黑树的概念,那么看TreeMap或者HashMap的源码肯定是有点难度的。在分析之前,先简单的介绍一下红黑树的概念,后面有时间,正确整理一份红黑树的专题博客。 红黑树的特点 每个节点要么是红色,要么是黑色 根节点必须是黑色 每个叶子节点是黑色 每个红色节点的两个子节点必须是黑色 任意节点到每个叶子节点的路径包含相同数量的黑节点 红黑树其实一种二叉树,它的目的是原创 2021-04-04 10:46:11 · 93 阅读 · 0 评论 -
Vector源码分析
Vector和ArrayList很类似,都是以动态数组的形式来存储数据 Vector线程安全的,因为每个操作方法都加的有synchronized关键字,针对性能来说会比较大的影响,慢慢就被放弃了。 源码中线程安全性示例方法 public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount+原创 2021-04-04 09:31:42 · 75 阅读 · 0 评论 -
LinkedList的源码分析
上一篇文章简单的整理了ArrayList的源码。想一想干脆把java几个常用的集合全部分析一遍。接下来讲解一下LinkedList的源码。 LinkedList与双向链表 linkedList本质是一个双向链表,所以在分析其源码时,首先要搞清楚什么是双向链表,双线链表有哪些特点: 灵活的空间要求,存储空间不需要连续。 不支持下标访问,支持顺序遍历检索。 增对增删效率会更高些,只和操作节点的前后节点有关系,无需移动元素。 源码分析 LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺原创 2021-04-03 23:54:07 · 86 阅读 · 0 评论 -
ArrayList的源码分析
今天放假呆在家里实在无聊,无意翻到之前自己做的笔记,今天整理出来发个博客。主要讲一下ArrayList的源码。 ArrayList的本质 arrayLilst本质是一个数组。它的源码内部各个方法的实现其实是建立在数组的基础上的。所以想要了解ArrayList,就不得不了解数组的特性。以下是数组的特点: 内存地址连续,使用之前必须指定数组长度 可以通过下标访问的方式来访问数组元素,查询效率高 增删操作会给系统带来性能消耗 源码分析 初始操作 在将源码之前,先将源码中定义的一些属性先简单的理一下: //默认原创 2021-04-03 22:45:46 · 82 阅读 · 0 评论