![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java集合
Java集合
King 4 ray
静坐常思己过,闲谈莫论人非。
展开
-
ConcurrentHashMap(未完)
JDK1.8 ConcurrentHashMap: 数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。除此以外,采用CAS和synchronized来保证并发安全。synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。 Put: 判断Node[]数组是否初始化,没有则进行初始化操作 2.通过hash定位Node[]数组的索引坐标,是否有Node节点,如果没有则使用CAS进行添加(链表的头结点),添加失败则进入下次循环。 3.检查原创 2020-11-08 20:08:32 · 82 阅读 · 0 评论 -
HashMap扩容机制源码撕起来(二)。
HashMap是我们日常工作中接触较多的集合之一,HashMap是线程不安全的,多线程环境下,建议使用ConcurrentHashMap。 面试必问问题HashMap底层原理,以下内容是个人对JDK8下HashMap的扩容机制的见解,如有错误,敬请指正。 红黑树过于复杂,本文将略过红黑树部分。奔着红黑树来的,可以移步了,对不起 。 ...原创 2020-10-09 19:55:48 · 72 阅读 · 0 评论 -
HashMap源码撕起来(一)。
HashMap是我们日常工作中接触较多的集合之一,HashMap是线程不安全的,多线程环境下,建议使用ConcurrentHashMap。 面试必问问题HashMap底层原理,以下内容是个人对JDK8下HashMap的见解,如有错误,敬请指正。 废话不多说,我们先来看看HashMap吧 HashMap的底层是数组+链表+红黑树。 1.构造方法: //首先加载因子*数组长度=数组允许存储的最大长度,我们只对核心构造器进行研究 //参数:初始化长度,加载因子 public Has原创 2020-09-25 21:02:14 · 151 阅读 · 0 评论 -
Vector源码基本理解。
盼望着,盼望着,面试就要来了,先撸个代码压压惊。 Vector这东西,我没用过,只在背面试题的时候见过,说是线程安全之类的,但是又不建议使用,真™绕。 那么我们来看看Vector Vector的底层也是Object[],这点和ArrayList有一点像呢! 1.构造方法: 无参构造方法: //调用有参的构造方法,创建一个长度为10的Object[] public Vector() { this(10);调用一个有参构造器 } public Vector(in原创 2020-09-24 22:05:20 · 107 阅读 · 0 评论 -
LinkedList源码基本理解。
分别总是在九月,回忆是四年的愁。 LinkedList这东西,我没用过,不过今天想看看源码,能不能发现有意思的东西呢? 那么我们来看看LinkedList LinkedList的底层是双向循环链表,这东西我也没咋接触过,大体就是下图这个样子的吧! 1.构造方法: 无参构造方法: //返回一个寂寞 public LinkedList() { } 带参构造方法://传入一个int类型参数, public LinkedList(Collection<? extends E原创 2020-09-24 21:10:59 · 104 阅读 · 0 评论 -
ArrayList源码基本理解。
1.JVM 1.8 内存区域划分 程序计数器(Program Counter Register),每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向像一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。 本地方法栈(Native Method Stack),它的具体做法是在NMS中登记native方法,在执行引擎(Excution Engine)执行的时候加载本地库(Native Libr原创 2020-09-24 20:04:42 · 150 阅读 · 1 评论