摘要: 这篇文章我们开始分析LinkedHashMap的源码,LinkedHashMap继承了HashMap,也就是说LinkedHashMap是在HashMap的基础上扩展而来的,因此在看LinkedHashMap源码之前,读者有必要先去了解HashMap的源码,可以查看我上一篇文章的介绍《Java集合系 阅读全文
posted @ 2018-01-23 09:00 劳夫子 阅读(827) 评论(1) 推荐(0) 编辑
摘要: 前面我们已经分析了ArrayList和LinkedList这两个集合,我们知道ArrayList是基于数组实现的,LinkedList是基于链表实现的。它们各自有自己的优劣势,例如ArrayList在定位查找元素时会优于LinkedList,而LinkedList在添加删除元素时会优于ArrayLi 阅读全文
posted @ 2018-01-18 09:04 劳夫子 阅读(1331) 评论(1) 推荐(1) 编辑
摘要: 上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈 阅读全文
posted @ 2018-01-17 11:14 劳夫子 阅读(1053) 评论(1) 推荐(4) 编辑
摘要: 本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组。数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集合类更好一些,这是使用数组的一大优势。但是我们知道数组存在致命的缺陷,就是在初始化时必须指定数组大小 阅读全文
posted @ 2018-01-15 10:04 劳夫子 阅读(1471) 评论(0) 推荐(3) 编辑
摘要: 通过前面几篇的分析,我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成代理类的字节码。ProxyGenerator这个类存放在sun.misc包下,我们可以通过OpenJ 阅读全文
posted @ 2018-01-05 15:45 劳夫子 阅读(13548) 评论(5) 推荐(13) 编辑
摘要: 上一篇我们分析了Proxy类的内部是怎样产生代理类的,我们看到了Proxy内部用到了缓存机制,如果根据提供的类加载器和接口数组能在缓存中找到代理类就直接返回该代理类,否则会调用ProxyClassFactory工厂去生成代理类。这里用到的缓存是二级缓存,它的一级缓存key是根据类加载器生成的,二级缓 阅读全文
posted @ 2018-01-01 15:06 劳夫子 阅读(6305) 评论(6) 推荐(5) 编辑
摘要: 在上一篇里为大家简单介绍了什么是代理模式?为什么要使用代理模式?并用例子演示了一下静态代理和动态代理的实现,分析了静态代理和动态代理各自的优缺点。在这一篇中笔者打算深入源码为大家剖析JDK动态代理实现的机制,建议读者阅读本篇前可先阅读一下笔者上一篇关于代理模式的介绍《JDK动态代理[1] 代理模式实 阅读全文
posted @ 2018-01-01 15:04 劳夫子 阅读(4052) 评论(7) 推荐(8) 编辑
摘要: 日常工作中经常会接触到代理模式,但一直没有对其进行深究。代理模式一直就像一团迷雾一样存在我心里,什么是代理模式?为什么要使用代理?代理模式有哪些实现?它的底层机制是怎样的?这些问题促使着我迫切想要揭开代理模式的神秘面纱。 1. 什么是代理模式? 日常生活中我们经常会碰到代理模式,例如我们找房产中介帮 阅读全文
posted @ 2018-01-01 15:01 劳夫子 阅读(3790) 评论(3) 推荐(5) 编辑