源码解析
文章平均质量分 95
powerfuler
这个作者很懒,什么都没留下…
展开
-
红黑树解析
参考:资料https://www.javazhiyin.com/29663.htmlhttps://www.cnblogs.com/nananana/p/10434549.html工具:http://algoanim.ide.sk/index.php?page=showanim&id=63一、红黑树介绍什么是红黑树? 红黑树是一种自平衡二叉查找树,是计算机科学领域中的一种数据结构,典型的用途是实现关联数组,存储有序的数据。它是在1972年由Rudolf Bayer发明的原创 2021-01-28 18:03:04 · 252 阅读 · 0 评论 -
ConcurrentHashMap实现原理以及源码解析(jdk1.8)
ConcurrentHashMap实现原理以及源码解析(jdk1.8)参考资料:https://blog.csdn.net/xu768840497/article/details/79194701http://www.cnblogs.com/leesf456/p/5453341.htmlhttps://www.cnblogs.com/banjinbaijiu/p/9147434.html一、数据结构1.1、先看一下1.7中的底层数据结构<jdk1.7>:数组(S.原创 2021-01-22 12:24:50 · 1141 阅读 · 0 评论 -
HashMap实现原理以及源码解析jdk1.8(5)--直击灵魂的发问
本文转自:程序员囧辉https://blog.csdn.net/v123411739/article/details/106324537正文二狗:先来点简单的,介绍下 HashMap 的底层数据结构吧。囧辉:我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。二狗:为什么要改成“数组+链表+红黑树”?囧辉:主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能..转载 2020-10-24 16:35:02 · 188 阅读 · 0 评论 -
HashMap实现原理以及源码解析jdk1.8(4)--疑难杂症
HashMap实现原理以及源码解析jdk1.8(4)--疑难杂症1、为什么HashMap桶中链表长度个数超过8才转为红黑树?首先,HashMap桶中, 并不是链表长度个数超过8一定会转为红黑树。在上文已演示过。树化的条件是:桶中链表的长度达到了8,并且数组的长度大于等于64。在极端情况下: 当连续存储的元素的 hash 相同, 个数达到 11时, 也就是说 table 中只有一个元素, 但是链表长度达到 11, 此时链表也会转树形;大部分情况下,链表存储能节约存储空间同时有着良好的.原创 2020-10-24 11:48:40 · 210 阅读 · 0 评论 -
HashMap实现原理以及源码解析jdk1.8(3)--put与扩容
HashMap实现原理以及源码解析jdk1.8--put与扩容原创 2020-10-23 19:23:16 · 678 阅读 · 0 评论 -
HashMap实现原理以及源码解析jdk1.8(2)--结构&初始化
HashMap实现原理以及源码解析jdk1.8--初始化JDK1.7中的HashMap采用了数组加链表的数据结构。JDK1.8中的HashMap采用了数组加链表加红黑树的数据结构。1、数据结构JDK1.8中的HashMap采用了数组加链表加红黑树的数据结构。如下图链表对象 Node/** * Basic hash bin node, used for most entries. (See below for * TreeNode subclass, and ..原创 2020-10-20 18:54:32 · 189 阅读 · 0 评论 -
多线程下HashMap的死循环
多线程下HashMap的死循环Java的HashMap是非线程安全的。多线程下应该用ConcurrentHashMap。多线程下[HashMap]的问题(这里主要说死循环问题): 1、多线程put操作后,get操作导致死循环。 2、多线程put非NULL元素后,get操作得到NULL值。 3、多线程put操作,导致元素丢失。 1、为何出现死循环? HashMap是采用链表解决Hash冲突,因为是链...原创 2018-04-01 19:35:22 · 11925 阅读 · 9 评论 -
HashMap实现原理以及源码解析(jdk1.7)
HashMap实现原理以及源码解析(jdk1.7)1、HashMap: HashMap是基于哈希表的Map接口的非同步实现。 此实现提供所有可选的映射操作,并允许使用null值和null键。 此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap不是线程安全的。 如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的H...原创 2018-03-31 13:05:35 · 236 阅读 · 0 评论 -
什么是HashMap(1)
转载自:微信公众号:程序员小灰众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。对于HashMap,我们最常使用的是两个方法:Get和Put。1.Put方法的原理调用Put方法的时候发生了什么呢?...转载 2020-10-20 16:36:51 · 798 阅读 · 0 评论 -
Java并发之CyclicBarrier
Java并发之CyclicBarrier目录Java并发之CyclicBarrier1、CyclicBarrier 是什么:2、CyclicBarrier类方法:2.1. CyclicBarrier(int parties)2.2. CyclicBarrier(int parties, Runnable barrierAction)2.3.getParties()2...原创 2019-08-04 11:09:14 · 384 阅读 · 0 评论 -
Java并发之CountDownLatch
Java并发之CountDownLatch目录Java并发之CountDownLatch1、什么是CountDownLatch2、CountDownLatch如何工作的3、方法说明4、实例:一个线程等待其他线程运算结果,其他线程不需要阻塞等待6、源码分析:7、CountDownLatch内部实现:7.1 await内部实现流程:7.2 countDown内部...原创 2019-08-04 10:32:03 · 377 阅读 · 0 评论 -
源码解析--Long、long类型的比较遇到的问题
Long、long类型的比较遇到的问题:1、long 是基本类型 Long是对象类型。 public static void main(String[] args) { Long A = 127l; Long B = 127l; long C = 127; long D = 127; //Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内...原创 2018-09-21 20:38:36 · 551 阅读 · 0 评论 -
CopyOnWriteArrayList实现原理以及源码解析
CopyOnWriteArrayList实现原理以及源码解析1、CopyOnWrite容器(并发容器) Copy-On-Write简称COW,是一种用于程序设计中的优化策略。 其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。 从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite...原创 2018-04-05 18:28:36 · 3223 阅读 · 1 评论 -
LinkedList和ArrayList的区别(补充)
LinkedList和ArrayList的区别1、ArrayList继承于 AbstractList, LinkedList继承于 AbstractSequentialList;2、ArrayList基于动态数组的数据结构, LinkedList基于双向链表。 对于随机访问, ArrayList比较占优势,LinkedList插入、删除元素比较快,如果只要调整指针的指向那么时间复杂度是O(1),但...原创 2018-04-05 11:43:05 · 697 阅读 · 0 评论 -
LinkedList实现原理以及源码解析(1.7)
LinkedList实现原理以及源码解析(1.7)在1.7之后,oracle将LinkedList做了一些优化,将1.6中的环形结构优化为了直线型了链表结构。1、LinkedList定义: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, De...原创 2018-04-04 00:32:03 · 951 阅读 · 0 评论 -
ArrayList实现原理以及源码解析(补充JDK1.7,1.8)
ArrayList实现原理以及源码解析(补充JDK1.7,1.8)ArrayList的基本知识在上一节已经讨论过,这节主要看ArrayList在JDK1.6到1.8的一些实现变化。JDK版本不一样,ArrayList类的源码也不一样。1、ArrayList类结构: //通过ArrayList实现的接口可知,其支持随机访问,能被克隆,支持序列化 public class ArrayList<...原创 2018-04-03 23:37:10 · 1134 阅读 · 0 评论 -
ArrayList实现原理以及源码解析(JDK1.6)
ArrayList实现原理以及源码解析(JDK1.6)1、ArrayList ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下。 多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类。 也可以使...原创 2018-04-03 22:51:53 · 241 阅读 · 0 评论 -
ConcurrentHashMap实现原理以及源码解析(jdk1.7)
ConcurrentHashMap实现原理以及源码解析ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。1、线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。2、效率低下的HashTable HashTable容器使用synchro...原创 2018-04-01 11:55:18 · 13760 阅读 · 4 评论 -
HashMap和HashTable区别
HashMap和HashTable区别1、HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。2、HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。3、HashTable有一个contains(Object value)功能和containsValue(Ob...原创 2018-03-31 23:10:22 · 284 阅读 · 0 评论 -
HashTable实现原理以及源码解析
HashTable实现原理以及源码解析1、HashTable 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。 Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。 Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为nul...原创 2018-03-31 23:02:42 · 11829 阅读 · 2 评论