
java_集合源码分析
强哥教你学编程
屌丝程序员架构师之路
展开
-
带你走进Java集合_HashMap源码分析_彻底理解HashMap的底层数据结构
上一篇文章主要从源码角度讲解了为什么HashMap底层容器的大小必须是2的整数次幂,接下来几篇博文将着重介绍HashMap的底层数据结构,同时这也是面试的重点。我们知道HashMap的底层数据结构:数组+链表+红黑树。在hashMap的源码中有一个非常重要的属性Node[]tab,这个属性就是HashMap底层数据结构中的数组,我们put的每一个值首先会封装成Node放到数组中。我们通过调用Has...原创 2018-06-26 18:05:32 · 388 阅读 · 0 评论 -
带你走进Java集合_HashMap源码分析_分析容器大小必须是2的整数次幂原因
我们上一篇文章主要介绍了HashMap的底层数据结构、构造方法、重要的属性,在上一篇我们遗留了一个问题,那就是为什么HashMap的大小必须是2的整数次幂,这一篇文章,我们从源码的角度来解决这个问题。首先我们回顾一下上一篇文章的重点内容1)HashMap的底层数据结构是数组+链表+红黑树,我将要有一篇文章重点讲解HashMap的链表、红黑树。2)底层数组的容量大小必须是2的整数次幂。这篇文章重点讲...原创 2018-06-25 17:14:02 · 419 阅读 · 0 评论 -
带你走进Java集合_HashMap源码分析1
前几篇博客主要从源码角度分析了List集合的两个重要的实现类ArrayList、LinkedList,今天我们先跳过Set集合,直接讲解Map的主要实现类,因为Set集合的主要实现类HashSet、TreeSet底层主要用Map的实现类,所以我们先分析Map,然后回过头来看Set就非常的简单了。所有的Map集合JDK7和JDK8以后源码实现差别非常的大,我们主要以JDK8的源码分析。本篇文章主要讲...原创 2018-06-16 17:47:08 · 424 阅读 · 0 评论 -
带你走进Java集合_LinkedList源码深入分析3
上一篇文章我们着重从源码角度介绍了LinkedList给我们提供的api方法的内部实现,这一篇我们就总结一下给我们提供的api,一些方法已经在这一篇讲过,但是还会在本篇会讲解到。第一个api方法:addFirst(E e),将元素插入到首节点,源码如下: public void addFirst(E e) { linkFirst(e); }通过上一篇对linkFirst的源...原创 2018-06-13 17:28:44 · 233 阅读 · 0 评论 -
带你走进Java集合_LinkedList源码深入分析2
上一篇文章,我们主要介绍了LinkedList的基本操作,我们要掌握以下知识点:1)LinkedList的底层数据结构是双向链表2)LinkedList可以添加任何的元素,包括null3)LinkedList在多线程下作为共享数据是不安全的。4)LinkedList把添加的数据封装成了Node,包含前驱prev,后继next,值val这一篇文章,我们从源码角度去了解LinkedList的其...原创 2018-06-13 10:40:23 · 210 阅读 · 0 评论 -
带你走进Java集合_LinkedList源码深入分析1
上几篇文章我们主要从源码角度分析了ArrayList,大家对ArrayList的学习,一定是掌握了ArrayList的用户,接下来再次总结一下ArrayList1.ArrayList的底层数据结构是数组,当数组满后需要对其进行扩容,我们知道数组的长度是不可以变化的,扩容时用到了数组的拷贝,把新扩容的数组赋值给底层的数组。2.ArrayList对读多写少的业务效率非常高的,因为我们直接可以用到数组...原创 2018-06-11 17:54:05 · 388 阅读 · 0 评论 -
带你走进Java集合_ArrayList源码深入分析4
上一篇我们主要讲解了ArrayList的迭代器,我们首先归纳一下ArrayList迭代器的主要内容:1.迭代器主要利用游标cursor来遍历集合的,游标cursor主要指向下一个元素的下标。所以cursor是关键。2.迭代器在迭代的时候可以察觉到fast-fail.3.Itr的游标只能向后移动,所以只能向后遍历,而ListIterator既可以向前移动也可以向后移动这一篇文章我们从源码角度讲解...原创 2018-06-08 15:10:26 · 252 阅读 · 0 评论 -
带你走进Java集合源码深入分析目录
1.带你走进Java集合_ArrayList源码深入分析_重要属性、构造函数、方法源码解析2.带你走进Java集合_ArrayList源码深入分析_removeAll、retainAll两个方法源码解析3.带你走进Java集合_ArrayList源码深入分析_迭代器源码解析...原创 2018-06-07 15:21:40 · 792 阅读 · 1 评论 -
带你走进Java集合_ArrayList源码深入分析3
上一篇文章我们从源码角度介绍了ArrayList中两个比较相似的方法,现在我们总结一下:1)removeAll:获取两个集合的差集,例如:list.removeAll(c),就是执行此方法,list会移除包含c的元素2)retainAll:获取两个集合的交集,例如:list.retainAll(c),就是执行此方法,list会移除不包含c的元素这篇文章接下来会从源码角度去分析ArrayList的迭...原创 2018-06-07 15:08:08 · 234 阅读 · 0 评论 -
带你走进Java集合_ArrayList源码深入分析2
上一篇文章我们对ArrayList的属性、构造方法、增删改查方法进行了详细的了解,也解读了为什么在多线程下ArrayList不能作为共享变量的原因,本篇文章主要介绍ArrayList的两个功能相似的方法。加入我们定义list第一个方法:removeAllpublic boolean removeAll(Collection<?> c) { Objects.require...原创 2018-06-06 15:44:41 · 506 阅读 · 0 评论 -
带你走进Java集合_ArrayList源码深入分析
ArrayList是List的接口中一个非常重要的实现类,也是项目中用的最频繁的集合,要了解为什么是最频繁的,就需要我们走进ArrayList内部,进行剖析它。一、ArrayList内部的数据结构 从ArrayList源码中我们可以很清楚的看到,ArrayList底层的数据结构是数组,所有ArrayList集合的增删改查无非就是对数组的增删改查,但是我们又知道数组的长度是不可变的,那么当数组...原创 2018-06-05 16:05:17 · 429 阅读 · 0 评论