认识HashMap从不同的思维

1.假设让我们去设计HashMap如何去做?

    源码预热  ---->源码猜疑------》源码分析 -------》总结思想

    1. 源码预热:首先我们应该通过简单的程序来运用一下,熟悉一下HashMap怎样取用

    2. 源码猜疑:就是用我们以前的知识进行合理的猜测。

    3. 源码分析:通过上述的猜测,可以让我们继续把源码看下去。

    4. 总结思想:通过看源码来分析,我们的不足的地方。

     ArrayList  ---》主要用到思想就是数组,因为数组查找比较快。

    LinkedList---》主要用到思想就是链表。因为删除和插入比较方便。

     HashMap用到思想就是数组+链表。

2. 我们知道HashMap的思想,接下来就是我们去设计?

      HashMap思想:数组+链表

      数组:

              最大值 ,初始化值,临界值,索引下标,这是我们所能想到的。

      链表:

             使用单向链表

      java语言进行定义:

           数组 : Object[] object ;

           链表:   class Node<E>{

                                 Node<E> next;

                                 E    value;

                                 E    key:

                          }

 

    简单画出草图:

 

3. 接下来我们可以点击去看源码(这时候我们应该是带着疑问和兴趣去看的)

    

      但是我们就用Map里面的put方法去看的,往近点,在往近点,发现我们这么多代码,此时我们应该是比较难过的,发现里面比较复杂,不要紧,我们只需要先认证我们前面猜想:

      数组:

       

       

        链表:

               

 

3. 证明我们的猜想和hashmap初步设计差不多,但是就差一个hash值没有设计出来?

    我们带着这样的疑问来看hash值的作用?在看问题之前,我们先要想到一下,为什么在入桶之前必须是随机的?

    想要知道这个问题,我们先假设两种特殊情况?

    1.  使用数组按照顺序存放会带来什么问题?

       2.每一次入桶位置都是相同的会产生问题?

           

  从上面这几种情况可以看出:我们必须保证每一次入桶的顺序的是随机的。

4.     如果让我们设计如何产生入桶的顺序是随机?

       首先我们可能想到Random这个函数,产生随机数,但是这样能够准确保证数组是随机的吗?(不一定),那么还有什么方式来产生随机数

        

       这是我们就可以看一下HashMap是如何设计产生随机数的?

5. 走进源码看HashMap如何产生随机数来定位桶的位置?

 

 

 

     

     

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值