![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码解读
文章平均质量分 84
施小赞
人生苦短,我爱Java
展开
-
Spring 循环依赖与三级缓存源码debug
通常来说,如果问 Spring 容器内部如何解决循环依赖, 一定是指默认的单例 Bean 中,属性互相引用的场景。也就是说,Spring 的循环原创 2022-06-15 21:06:57 · 321 阅读 · 0 评论 -
LinkedList源码解读
1、LinkedList简介 通过对ArrayList的源码分析知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本文介绍的LikedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。下面我们就来看看LinkedList是怎么实现的。下面是LinkedList的UML图:继承了AbstractSequentialList抽象类:在遍历Link.原创 2022-03-24 10:18:01 · 435 阅读 · 0 评论 -
ArrayList源码解读
1、ArrayList 简介1.1、ArrayList简介 1)ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。 2)该类封装了一个动态再分配的Object[]数组,每一个类对象都有一个capacity属性,表示它们所封装的Object[]数组的长度,当向ArrayList中添加元素时,该属性值会自动增加。 如果想ArrayList中添加大量元素,可使用ensureCapacity方法一次性增加capacity,可以减少增加重分配的次数提高性能。原创 2022-03-15 16:58:46 · 283 阅读 · 0 评论 -
HashMap源码解读
首先我们从他的存储结构来讲,HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示:(1)从源码可知,HashMap类中有一个非常重要的字段,就是 Node<K,V>[] table ,即哈希桶数组,明显它是一个Node的数组。我们来看Node[JDK1.8]是何物static class Node<K,V> implements Map.Entry<K,V> { final int hash; //用来定位数原创 2021-12-28 17:14:25 · 290 阅读 · 0 评论 -
AQS源码解读
AQS 源码直接解读比较困难,这里从示例代码入手模拟 A、B、C 三个人都要去银行窗口办理业务,但是银行窗口只有一个,一次只有一个人可以办理业务,办理业务的人会上锁,防止其他人争抢,我们使用 lock.lock() 模拟这种情况/** * @author by shizan * @Classname AQSDemo * @Description TODO * @Date 2021/11/26 4:11 下午 */public class AQSDemo { public st原创 2021-12-02 16:47:08 · 690 阅读 · 5 评论