zoukankan      html  css  js  c++  java
  • 再学Java 之 HashMap的底层实现

    今天参加欢聚时代的面试,我说我自己依靠自己的理解重新实现过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

  • 相关阅读:
    进程
    交换分区
    linux命令
    Linux进程
    开会
    今天的学习情况
    CentOS7.6 yum方式安装redis最新版
    Centos7 yum安装postgresql 9.5
    GitLab CI runner can't connect to tcp://localhost:2375 in kubernetes
    Server 2008 R2远程桌面授权,解决120天过期问题
  • 原文地址:https://www.cnblogs.com/scutwang/p/4044419.html
Copyright © 2011-2022 走看看