公子姓王

导航

随笔分类 -  Java 容器源码解析

Java 容器源码解析
Java容器解析系列(17) LruCache详解
摘要:在之前讲 " " 的时候,我们说起可以用来实现 算法,接下来我看一下其中的一个具体实现 中的 . 关于Lru算法,请参考 "漫画:什么是LRU算法?" talk is cheap, I am gonna show you something really expensive. java packag 阅读全文

posted @ 2019-05-29 10:54 公子姓王 阅读(237) 评论(0) 推荐(0)

Java容器解析系列(16) android内存优化之SparseArray
摘要:HashMap的缺点: 1. 自动装箱导致的性能损失; 2. 使用拉链法来解决hash冲突,如果hash冲突较多,需要遍历链表,导致性能下降,在Java 8 中,如果链表长度 8,会使用红黑树来代替链表; 3. 由于loadFactor的存在,导致(1 loadFactor) capacity 的空 阅读全文

posted @ 2019-05-28 15:55 公子姓王 阅读(259) 评论(0) 推荐(0)

Java容器解析系列(15) HashTable Dictionary & Properties
摘要:HashTable的实现原理与HashMap没有什么区别; 其与HashMap的主要区别如下: 1. 添加进入jdk时间:HashTable在jdk1.0时添加,HashMap在jdk1.2时添加; 2. 类签名:两者都实现了Map接口,但是HashMap继承自AbstractMap,HashTab 阅读全文

posted @ 2019-05-28 15:13 公子姓王 阅读(261) 评论(0) 推荐(0)

Java容器解析系列(14) IdentityHashMap详解
摘要:`IdentityHashMap HashMap`相同,主要不同点在于: 1. 数据结构:使用一个数组 来存储 ,` table[2k] key table[2k + 1] value`,也即: ]( 使用数组 + 链表); 2. 中的 和 通过 来比较是否相等( 通过 ); 3. 中的 hash冲 阅读全文

posted @ 2019-05-28 14:56 公子姓王 阅读(1195) 评论(0) 推荐(0)

Java容器解析系列(13) WeakHashMap详解
摘要:关于 其实没有太多可说的,其与 大致相同,区别就在于: 1. 对每个 的引用方式为弱引用; 关于 4种引用方式,参考 "java Reference" 网上很多说 弱引用指向 Entry,这种说法是完全错误的 2. 在 被回收时,对应的value并没有回收,只有在调用 的方法时才会回收 ; 具体请看 阅读全文

posted @ 2019-05-28 10:20 公子姓王 阅读(202) 评论(0) 推荐(0)

Java容器解析系列(12) LinkedHashMap 详解
摘要:继承自 ,除了提供 的功能外, 还是维护一个双向链表(实际为带头结点的双向循环链表),持有所有的键值对的引用: 1. 这个双向链表定义了迭代器的迭代顺序,默认按 迭代; 2. 也可以在构造时设置为按照 方式(访问顺序)迭代(from least recently accessed to most r 阅读全文

posted @ 2019-05-27 21:22 公子姓王 阅读(235) 评论(0) 推荐(0)

Java容器解析系列(11) HashMap 详解
摘要:本篇我们来介绍一个最常用的 结构—— 关于HashMap,关于其基本原理,网上对其进行讲解的博客非常多,且很多都写的比较好,所以.... 这里直接贴上地址: 关于 算法: "Hash算法" "Hash时取模一定要模质数吗?" 关于HashMap: "深入Java集合学习系列:HashMap的实现原理 阅读全文

posted @ 2019-05-24 19:13 公子姓王 阅读(182) 评论(0) 推荐(0)

Java容器解析系列(10) Map AbstractMap 详解
摘要:前面介绍了 和`Queue java Collection Map`,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很多Set实现类是通过对应的Map来实现,使用Map中key不能重复的特性,往Set中add元素的本质就是Map的put(),这里先介绍Map,后续介绍Set的时候再做具 阅读全文

posted @ 2018-10-15 09:17 公子姓王 阅读(463) 评论(0) 推荐(0)

Java容器解析系列(7) ArrayDeque 详解
摘要:ArrayDeque,从名字上就可以看出来,其是通过数组实现的双端队列,我们先来看其源码: / 有自动扩容机制; 不是线程安全的; 不允许添加null; 作为栈使用时比java.util.Stack快; 作为队列使用时比LinkedList快; 支持fast fail; @since 1.6 / p 阅读全文

posted @ 2018-10-12 17:19 公子姓王 阅读(363) 评论(0) 推荐(0)

Java容器解析系列(8) Comparable Comparator
摘要:`Comparable Comparator`接口是两个用于对对象进行大小比较的接口,在java集合相关类中,也被经常地使用到. 关于其使用,可以参考网络上的其他博客(没什么好说的);这里阐述关于这两个接口的区别,直接看源码即可: 阅读全文

posted @ 2018-10-12 16:57 公子姓王 阅读(148) 评论(0) 推荐(0)

Java容器解析系列(9) PrioriyQueue详解
摘要:PriorityQueue:优先级队列; 在介绍该类之前,我们需要先了解一种数据结构——堆,在有些书上也直接称之为优先队列; 堆(Heap)是 是具有下列性质的完全二叉树:每个结点的值都 = 其左右子结点的值,称为最大堆(Max Heap,或称大顶堆);每个结点的值都 Note:上述定义摘自《大话数 阅读全文

posted @ 2018-10-12 16:57 公子姓王 阅读(351) 评论(0) 推荐(0)

Java容器解析系列(6) Queue Deque AbstractQueue 详解
摘要:首先我们来看一下Queue接口: javadoc中对于Queue接口的表述如下: Queue 用来存放 优先处理元素 的集合,这种场景一般用于缓冲、并发访问。 除了继承 Collection 接口的一些方法,Queue 还添加了额外的 添加、删除、查询操作。 添加、删除、查询这些个操作都提供了两种形 阅读全文

posted @ 2018-10-12 16:56 公子姓王 阅读(323) 评论(0) 推荐(0)

Java容器解析系列(4) ArrayList Vector Stack 详解
摘要:ArrayList 这里关于ArrayList本来都读了一遍源码,并且写了一些了,突然在原来的笔记里面发现了收藏的有相关博客,大致看了一下,这些就是我要写的( ╹▽╹ ),而且估计我还写不到博主的水平,这里直接将收藏的博客列出来: 1. "从源码角度彻底搞懂ArrayList" 这篇博客的重要内容包 阅读全文

posted @ 2018-10-12 16:55 公子姓王 阅读(176) 评论(0) 推荐(0)

Java容器解析系列(5) AbstractSequentialList LinkedList 详解
摘要:AbstractSequentialList为顺序访问的list提供了一个骨架实现,使实现顺序访问的list变得简单; 我们来看源码: 从上面源码可以看出: 1. 所有在AbstractSequentialList默认实现的方法,内部都调用了listIterator()来实现(iterator()也 阅读全文

posted @ 2018-10-12 16:55 公子姓王 阅读(228) 评论(0) 推荐(0)

Java容器解析系列(3) List AbstractList ListIterator RandomAccess fail-fast机制 详解
摘要:做为数据结构学习的常规,肯定是先学习线性表,也就是Java中的List,开始 Java中List相关的类关系图如下: 此篇作为对Java中相关类的开篇.从上图中可以看出,List和AbstractList是表的具体实现类的抽象. 首先我们来看一下List接口: List接口继承自Collection 阅读全文

posted @ 2018-10-12 16:53 公子姓王 阅读(190) 评论(0) 推荐(0)

Java容器解析系列(2) 具体化的第一步——Collection到AbstractCollection
摘要:在通向具体化的List,Queue之前,我们需要先了解一下Collection接口和AbstractCollection抽象类,这两个都是处于Collection顶层的存在. Collection接口,是Collection hierarchy的根接口,我们来看其定义了哪些必须实现的方法: 从上面的 阅读全文

posted @ 2018-10-12 16:52 公子姓王 阅读(160) 评论(0) 推荐(0)

Java容器解析系列(1) 迭代的进化——从Enumeration到Iterator
摘要:在Java中,对于所有的Collection,都有一个特性,可以通过迭代器来遍历和删除其中的元素,因为Collection接口继承自Iterable接口. Iterable接口中只有一个方法: Iterable接口除了提供iterator()方法返回迭代器之外,所有实现了Iterable接口的类都可 阅读全文

posted @ 2018-10-12 16:39 公子姓王 阅读(272) 评论(0) 推荐(0)

Java容器解析系列(0) 开篇
摘要:最近刚好学习完成数据结构与算法相关内容: "Data Structures and Algorithm Analysis" 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻,且在网上找了半天没有找到太好的关于容器类细节的讲解(其中找到一些博客,讲得很好,但是其中还是有些 阅读全文

posted @ 2018-10-12 16:32 公子姓王 阅读(336) 评论(0) 推荐(0)