再学Java 之 HashMap的底层实现
2014-10-22 21:50
225 查看
今天参加欢聚时代的面试,我说我自己依靠自己的理解重新实现过HashMap。描述我自己的实现思想后,面试官问“hashmap”底层如果用数组不是效率比较低吗,不是更应该用红黑树吗?我一下子就蒙了。用数组的确效率比较低,但是当初对比JDK的源码发现,JDK的确是使用数组+链表来存储实体。
回来后,急忙看了一下源码,也对比了一下JDK6 和JDK 8的HashMap,发现了不太对劲的地方。原来,当初看的是JDK 6。在这个版本的JDK的确是使用数组+链表来存储。但是到了JDK 8 的时候,为了解决碰撞,JDK提出了一种新的方式,即,规定一个因子,一开始是用数组+链表来存储,当大于这个因子时,链表转化为红黑树。也就是说JDK 8的版本使用了数组+链表/红黑树。
这一周还比较忙。等忙完了在写一篇博文从源码分析一下JDK 8 改进的地方。
PS:这种通过判断存储实体所占比例,采用不同的处理方式。不仅在这里出现。还在数组工具类中出现过。即Arrays.sort();根据数组个数采用普通排序或者快速排序。
参考资料:
1、http://www.jetbrains.com/idea/webhelp/comparing-files.html
2、http://coderbee.net/index.php/java/20131018/519
3、http://developer.51cto.com/art/201404/437062.htm
回来后,急忙看了一下源码,也对比了一下JDK6 和JDK 8的HashMap,发现了不太对劲的地方。原来,当初看的是JDK 6。在这个版本的JDK的确是使用数组+链表来存储。但是到了JDK 8 的时候,为了解决碰撞,JDK提出了一种新的方式,即,规定一个因子,一开始是用数组+链表来存储,当大于这个因子时,链表转化为红黑树。也就是说JDK 8的版本使用了数组+链表/红黑树。
这一周还比较忙。等忙完了在写一篇博文从源码分析一下JDK 8 改进的地方。
PS:这种通过判断存储实体所占比例,采用不同的处理方式。不仅在这里出现。还在数组工具类中出现过。即Arrays.sort();根据数组个数采用普通排序或者快速排序。
参考资料:
1、http://www.jetbrains.com/idea/webhelp/comparing-files.html
2、http://coderbee.net/index.php/java/20131018/519
3、http://developer.51cto.com/art/201404/437062.htm
相关文章推荐
- Java的HashMap底层实现详解
- Java集合系列:-----------08HashMap的底层实现
- Java基础面试题2-HashMap的源码,实现原理,底层结构
- JAVA HashMap底层实现原理
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- JDK学习---深入理解java中的HashMap、HashSet底层实现
- (转载)Java中HashMap底层实现原理(JDK1.8)源码分析
- java的HashCode equals == 以及hashMap底层实现深入理解
- [Java]HashMap的底层实现
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java之HashMap底层实现原理/HashMap、HashTable、HashSet
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java集合 --- HashMap底层实现和原理
- Java集合,HashMap底层实现和原理(1.7数组+链表与1.8+的数组+链表+红黑树)
- Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
- java面试之HashMap的实现原理和底层数据结构
- Java中HashMap底层实现