
集合源码解析
文章平均质量分 85
iteye_15449
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
简介: TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但 TreeSet 底层是通过 TreeMap 来实现的,因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑...原创 2010-09-01 22:17:01 · 1012 阅读 · 1 评论 -
ArrayList源码解析
ArrayList是我们使用得最多的一个集合类之一一般用来做包装DTO到view层来显示数据. ArrayList继承了AbstractList类,实现了List,RandomAccess,Cloneable接口 public class ArrayList<E> extends AbstractList<E> implements ...原创 2010-09-02 22:10:56 · 290 阅读 · 0 评论 -
通过分析 JDK 源代码研究 Hash 存储机制
HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。 通过 HashM...原创 2010-09-03 10:38:04 · 96 阅读 · 0 评论 -
深入理解HashMap
Hashmap是一种非常常用的、应用广泛的数据类型。1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数...原创 2010-09-04 11:24:11 · 80 阅读 · 0 评论 -
Java5 Concurrent包中的锁机制
JDK1.5以后加入了concurrent包,主要是为了提高多线程的开发效率,其中提供了很多支持并发的集合类,其中包括:ConcurrentHashMap。大家知道HashTable也是支持并发环境的,也就是说多线程安全的,那两者有什么区别呢?分析 其实简单的说是同步机制有区别,具体区别又在那里呢? 请看HashTable的put方法:/*...原创 2010-09-04 19:58:04 · 113 阅读 · 0 评论 -
ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试官也因此发生了冲突,结果可想而知。还是闲话少说,通过仔细阅读源代码...原创 2010-09-04 20:06:49 · 85 阅读 · 0 评论 -
Map 四种同步方式的性能比较
如果需要使 Map 线程安全,大致有这么四种方法: 1、使用 synchronized 关键字,这也是最原始的方法。代码如下 synchronized(anObject){ value = map.get(key);}JDK1.2 提供了 Collections.synchronizedMap(originMap) 方法,同步方式其实和上面这段代码相同。...原创 2010-09-04 20:25:37 · 136 阅读 · 0 评论 -
Set中如何保证元素的唯一性
首先说建议的情况: 比如你的对象想放到Set集合或者是想作为Map的key时(非散列的Set和Map,例如TreeSet,TreeMap等),那么你必须重写equals()方法,这样才能保证唯一性。当然,在这种情况下,你不想重写hashCode()方法,也没有错。但是,对于良好的编程风格而言,你应该在重写equals()方法的同时,也重写hashCode()方法。 然后再说说必须重写hashCo...原创 2010-09-04 21:11:05 · 812 阅读 · 0 评论 -
java.util.HashMap源码要点浅析
1、 散列表要解决的一个问题就是散列值的冲突问题,通常是两种方法:链表法和开放地址法。链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。java.util.HashMap采用的链表法的方式,链表是单向链表,因此在删除过程中要自己维持prev节点,我想不采用双向链表是从节省空间考虑。一...原创 2010-09-04 21:54:16 · 94 阅读 · 0 评论