随笔分类 -  集合

摘要:简单介绍 由于CopyOnWriteArrayList的注释并不是很多,所以在这里简单的说明下,它属于线程安全,底层是通过生成数组的新副本来实现的,也就是在修改列表元素/结构的情况会生成新副本。简单地说,它是ArrayList的一个变体!探索CopyOnWriteArrayList源代码是基于JDK 阅读全文
posted @ 2020-12-21 22:14 zliawk 阅读(144) 评论(0) 推荐(0)
摘要:前言 EnumMap初次见面,请多多关照!对于该类的注释直接上总结: 专门用于枚举类型的键的Map实现。EnumMap内部的数据结构是数组,按枚举常量的声明顺序排列它的键,与其他Map实现类不同的是,它的迭代器并不会抛出快速失败错误! 该类的代码不到1000行,速速解决掉,探索EnumMap底层实现 阅读全文
posted @ 2020-12-21 22:09 zliawk 阅读(94) 评论(0) 推荐(0)
摘要:前言 探索HashMap底层实现是基于JDK1.8,看代码之前翻了一下别人写的博客我才知道JDK1.7版本的HashMap是由数组 + 链表的数据结构组成,而对于JDK1.8是由数组 + 链表 + 红黑树的数据结构组成,所以我又去了解了什么是二叉树、平衡二叉树、红黑树,为的就是能做个铺垫。既然是由数 阅读全文
posted @ 2020-12-21 21:58 zliawk 阅读(69) 评论(0) 推荐(0)
摘要:前言 HashSet的底层实现依赖于HashMap,所以它的数据结构也是数组 + 链表 + 红黑树,而对于它的类注释也没什么好总结的,探索HashSet底层实现是基于JDK1.8。仔细一想,HashSet存在的意义是什么?有时候需要添加元素时,也就是只有单个对象,并没有所谓的键值对,或许还有些用处, 阅读全文
posted @ 2020-12-21 21:56 zliawk 阅读(311) 评论(0) 推荐(0)
摘要:前言 探索Hashtable底层实现是基于JDK1.8,它的数据结构是数组 + 链表。在不考虑线程是否安全的前提下,它的很多细节处理都不如HashMap,何况如今的HashMap又加了红黑树,查询修改肯定比不上,因为红黑树的时间复杂度是O(logN),而链表的时间复杂度是O(N),新增与删除无法比较 阅读全文
posted @ 2020-12-21 21:53 zliawk 阅读(384) 评论(0) 推荐(1)
摘要:前沿 我也是第一次认识IdentityHashMap,在工作中从未使用过它,所以对它的使用场景可能并不是很了解,本文也仅仅针对基于JDK1.8的源码进行探索。IdentityHashMap的数据结构应该是如图所示: 这个数据结构是我在看源码之前看了几篇别人写的文章所了解到的,个人喜欢在看源码对目标有 阅读全文
posted @ 2020-12-21 21:50 zliawk 阅读(103) 评论(0) 推荐(0)
摘要:前言 印象中对LinkedHashMap的使用次数好像也不多,参考了几篇文章发现它依赖于HashMap而存在,也就是说它在HashMap的基础上又增加了某些特性,比如说有序。既然是基于HashMap,那么它内部的数据结构也应该有数组 + 链表 + 红黑树,而刚才说它又加上了自己的有序特性,那么应该还 阅读全文
posted @ 2020-12-21 21:45 zliawk 阅读(217) 评论(0) 推荐(0)
摘要:前言 额... 底层实现了LinkedHashMap,它的数据结构是数组 + 链表 + 红黑树,内部通过一条链表来维护有序性,按照插入顺序进行排列。代码只有100行... 数据结构 public class LinkedHashSet<E> extends HashSet<E> implements 阅读全文
posted @ 2020-12-21 21:44 zliawk 阅读(357) 评论(0) 推荐(0)
摘要:前言 老样子,还是先看注释!本来以为能收获点什么干货,结果注释与ArrayList的注释基本相同,有点尴尬...LinkedList的源码是基于JDK1.8。 开干 先上LinkedList类的注释,在深入到类中详细说明属性与方法。 阅读注释 它的意思是:通过索引来操作LinkedList的话,每次 阅读全文
posted @ 2020-12-21 21:35 zliawk 阅读(130) 评论(0) 推荐(0)
摘要:前言 我们都知道ArrayList适合查询/替换、LinkedList适合添加/删除,造成这样子的原因也在于它们底层的实现。光说这些理论似乎大家都会,所以准备用更加具体的例子来证明它,也能更好地比较这两者之间的性能关系。在测试具体场景前,简单说明下环境配置,window环境下:内存8个G;JDK8; 阅读全文
posted @ 2020-12-21 21:28 zliawk 阅读(188) 评论(0) 推荐(0)
摘要:简单介绍 Stack类就一百多行代码,简单说明下。它的特性是后进先出(LIFO),继承了Vector类,大部分的操作都是使用Vector中的方法。在注释中,作者提醒我们若要使用后进先出的栈操作,应该优先使用Deque,这么说来,该类已经被放弃了,早在JDK1.0的时候它就出现了,是有点老了!我们说过 阅读全文
posted @ 2020-12-21 20:44 zliawk 阅读(217) 评论(0) 推荐(0)
摘要:前言 探索TreeMap底层实现是基于JDK1.8,通过该类的注释可以了解它的数据结构是红黑树,默认是按照自然顺序进行排序(所有的键都必须去实现Comparable),当然也可以通过指定比较器进行排序(所有的键都必须实现Comparator)。至于什么是红黑树,读者最好有一定的了解,那看懂它的源码也 阅读全文
posted @ 2020-12-21 20:38 zliawk 阅读(318) 评论(0) 推荐(0)
摘要:前言 TreeSet的内部实现基于TreeMap,所以它的数据结构是红黑树。注释也不总结了,此探索是基于JDK1.8,直接进入正题。 数据结构 public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Clo 阅读全文
posted @ 2020-12-21 20:33 zliawk 阅读(678) 评论(0) 推荐(0)
摘要:背景 上周发布了探索ArrayList的底层实现,趁热打铁!实际上ArrayList与Vector的实现上非常相似,代码基本上都是一样的,还是老样子,先看注释,我能说注释都差不多一样吗。探索Vector源代码是基于JDK1.8的。 阅读注释 Vector内部是通过动态数组实现的。 Vector可自定 阅读全文
posted @ 2020-12-21 19:37 zliawk 阅读(313) 评论(0) 推荐(0)
摘要:前言 探索WeakHashMap底层实现是基于JDK1.8,它的数据结构是数组 + 链表。就不贴它的注释了,直接总结一下吧: WeakHashMap基于弱键实现了Map接口,也就是说,当某个键不在使用时会被丢弃,对应的键值对将会被自动移除。如何确定不在使用取决于GC是否运行,而对于GC何时运行我们并 阅读全文
posted @ 2020-12-21 19:23 zliawk 阅读(98) 评论(0) 推荐(0)
摘要:比较 趁热打铁!比较最近学习到的几个Map实现类,也正好总结下!此比较是基于JDK1.8,直接用表格展示。 比较点 HashMap Hashtable IdentityHashMap LinkedHashMap TreeMap WeakHashMap 数据结构 数组链表红黑树 数组链表 数组(哈希探 阅读全文
posted @ 2020-12-21 19:22 zliawk 阅读(109) 评论(0) 推荐(0)
摘要:前言 HashMap的唯一鸡肋就是非线程安全,在如今的高并发场景下它能派上的用场也将越来越少,为了兼有HashMap高效的存取能力的同时又能保证线程安全滋生了ConcurrentHashMap。在JDK1.8以前,数据结构仍然是数组、链表的方式,不过与Hashtable相比,它并不是对整个哈希表上锁 阅读全文
posted @ 2020-12-20 20:31 zliawk 阅读(182) 评论(0) 推荐(0)
摘要:前言 上次看ArrayList底层机制时把ArrayListSpliterator放了放,现在回过头来具体看看实现。 简单粗暴 直接上代码吧! static final class ArrayListSpliterator<E> implements Spliterator<E> { //指向当前集 阅读全文
posted @ 2020-12-18 22:08 zliawk 阅读(199) 评论(0) 推荐(0)
摘要:背景 想进步,想学习了,反正面试都要问的,还不如早点看了好。探索ArrayList源代码是基于JDK1.8版本的,相比以前的版本不知道有没有优化,毕竟没看过之前版本的底层代码。一般看底层代码前我都习惯先阅读下该类的注释说明,也不知道在哪里养成的习惯。相信大家都写过应用代码,既然写过,那也深知注释对于 阅读全文
posted @ 2020-12-16 22:31 zliawk 阅读(182) 评论(0) 推荐(1)