JDk源码学习
文章平均质量分 79
记忆力不好
这个作者很懒,什么都没留下…
展开
-
JDK源码学习(2)-TreeMap源码分析
之前介绍了Map集合中的具体实现类的HashMap,HashTable。(JDK源码 码学习(1)-HashMap源码分析,HashMap与HashTable的差别) 这两个类都是基于哈希表实现的,今天我们介绍另一种Map集合,TreeMap。TreeMap是基于红黑树实现的。 TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会转载 2016-05-02 16:56:55 · 1303 阅读 · 1 评论 -
JDK源码学习(4)-HashMap的遍历方式,两种迭代器源码分析
对HashMap本身没有迭代器,如果要对HashMap遍历有两种方式。 keySet()方法获取Set对象,调用该对象的迭代器对key值遍历。 entrySet()方法获取SetMap map = new HashMap(); map.put("a1", "a11"); map.put("a2", "a22"); Set set = map.keySet(); for(Iterator iter=原创 2016-05-11 15:54:08 · 1256 阅读 · 0 评论 -
JDK源码学习(5)-Map的性能比较,HashMap和TreeMap,ConcurrentSkipListMap
在之前已经学习过: JDK源码学习(1)-HashMap源码分析,HashMap与HashTable的差别 JDK源码学习(2)-TreeMap源码分析 这篇文章对jdk提供的Map实现类的性能进行比较:- 问题:比较Java原生的 3种Map的效率。 1.TreeMap 2.HashMap 3.ConcurrentSkipListMap- 结果插入和删除操转载 2016-05-04 14:33:18 · 886 阅读 · 0 评论 -
JDK源码学习(6)-ConcurrentHashMap代码学习
在JDK源码学习(1)-HashMap源码分析,HashMap与HashTable的差别的时候我们就学习过HashMap和Hashtable,知道Hashtable是线程安全的,而HashMap在多线程的情况下是不安全的。我们在多线程的情况下除了用Hashtable代替HashMap以外,也可以用collections.synchronizedmap(),还可以使用uitl.concurrent包下原创 2016-05-21 17:08:42 · 708 阅读 · 0 评论 -
JDK源码学习(3)-LinkedHashMap源码学习
LinkedHashMap继承HashMap,是对HashMap的扩展。LinkHashMap内部维持一个双向链表,维护节点的插入或者LRU次序:迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快。 可以把LinkedHashMap理解成包含两个数据结构,一个是HashMap当中的 Entry[] table哈希表,转载 2016-05-16 22:42:01 · 1007 阅读 · 0 评论 -
Java并发编程-Lock和condition的原理及AQS的运用
AQS的全称为(AbstractQueuedSynchronizer),这个类也是在java.util.concurrent.locks下面。这个类似乎很不容易看懂,因为它仅仅是提供了一系列公共的方法,让子类来调用。那么要理解意思,就得从子类下手,反过来看才容易看懂。如下图所示: 图 5-15 AQS的子类实现 这么多类,我们看那一个?刚刚提到过锁(Lock),我们就从锁开原创 2016-08-16 19:33:00 · 5707 阅读 · 0 评论 -
JDK源码学习(1)-HashMap源码分析,HashMap与HashTable的差别
Hashtable是HashMap的线程安全版本,它的实现和HashMap实现基本一致,除了它不能包含null值的key和value,并且它在计算hash值和数组索引值的方式要稍微简单一些。 Hashtable线程安全实现方式是将所有方法都标记成synchronized,但这样加锁的粒度大,容易引起一些性能问题,所以目使用java.concurrent.ConcurrentHashMap类性能转载 2016-07-28 20:46:42 · 1597 阅读 · 0 评论