
源码分析
JeffCoding
热爱移动互联网,热爱安卓,热爱Java
展开
-
Java容器(六):从容器出发探讨hashCode和equals
一、容器中的hashcode和euqals Java容器框架中有List和Set,其中List允许有重复元素,而Set则不允许有重复元素,Set是如何处理这里重复元素的?肯定是与equals相关,通过迭代来equals()是否相等,但是当数据量大的时候,假如我们往HashSet中添加10000个元素,equals()10000次,效率岂不是很低?我们来看看HashSet是如何实现的 publ原创 2017-02-10 13:22:12 · 814 阅读 · 0 评论 -
Java容器(七):TreeMap源码分析
TreeMap内部是使用红黑树的数据结构来实现的,同时,TreeSet的内部各方法的原理都是通过TreeMap来操作的,所以要想弄懂TreeMap,红黑树一定要要懂,懂了红黑树,再来看TreeMap的源码,还是很容易的! 看此篇文章前,请看我的另一篇红黑树文章:红黑树精讲一、红黑树的要点红黑树的4个规则:(必须牢记) 1.每个节点不是红色就是黑色的; 2.根节点总是黑色的; 3.原创 2017-02-11 23:30:25 · 962 阅读 · 0 评论 -
JDK7下ConcurrentHashMap源码分析
一、ConcurrentHashMap出现的原因 我们之前学过HashMap,也知道HashMap不是线程安全的,在多线程环境下,HashMap的put方法有可能引起死循环。于是HashTable这个类出现,它在大量的方法前都加了内置锁Synchronized,这就保证了它的线程安全性,但是这种方法太极端,导致效率低下。当一个线程访问了HashTable的同步方法时,其它线程就只能等待该线程释放锁原创 2017-02-22 20:30:44 · 5140 阅读 · 5 评论 -
深入分析AbstractQueuedSynchronizer共享锁的实现原理:CountDownLatch
转自:深度解析Java 8:AbstractQueuedSynchronizer的实现分析AQS共享功能的实现在开始解读AQS的共享功能前,我们再重温一下CountDownLatch,CountDownLatch为java.util.concurrent包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数器的大小,然后可被多个线程并发的实现减1操作,并在计数器为0后转载 2017-02-23 19:35:38 · 1904 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口j转载 2017-03-19 15:30:49 · 2247 阅读 · 0 评论 -
Java容器(四):HashMap(Java 7)的实现原理
一、HashMap的定义和构造函数public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap继承自AbstractMap,AbstractMap是Map接口的骨干实现,AbstractMap中实现了Map中最重要最常用和方法,这样Has原创 2017-02-09 13:48:08 · 35165 阅读 · 17 评论 -
深入分析AbstractQueuedSynchronizer独占锁的实现原理:ReentranLock
一、ReentranLock 相信我们都使用过ReentranLock,ReentranLock是Concurrent包下一个用于实现并发的工具类(ReentrantReadWriteLock、Semaphore、CountDownLatch等),它和Synchronized一样都是独占锁,它们两个锁的比较如下: 1. ReentrantLock实现了Lock接口,提供了与synchroni原创 2017-02-23 18:06:30 · 3217 阅读 · 0 评论