• java源码系列:HashMap源码验证,自己手写一个HashMap之01-基本框架


    那讲的这些知识点能不能用代码来实现,接下来就给大家来表演一下铁锤炸弹,我们用源码验证,

    也就是刚才在这里给大家画这个过程,我希望用源码,用我自己手写一个hashmap,

    来给大家,去把这个源码这个过程,全部给大家去讲透讲明白,让大家也就是说,

    把讲的这个过程也能用源码来验证。

    写Map接口

    定义map接口

    首先呢,我们在这里呢,定义为一个map,一个interface这个接口,大家知道啊,

    我们这个hashmap,它底层呢,也是实现于map这个接口,所以在这里呢,

    我们要定义它的这个接口,map它是key、value形式的存储,

    所以在这个地方呢,我们也是一样要支持它的key、value的这个泛型的一个支持,

    所以在这里呢,我们定义为key、value的泛型。

    put、get、size方法

    然后呢,我们这个map里面有哪几个方法呢?

    首先有一个put方法,对吧?这个put方法对应的,当然还有一个get的方法,

    那我们的put方法呢,它是可以通过传我们的key和value需要保存。

    然后我们的get方法是通过传我们的key,返回得到我们的value,

    然后呢,我们还有一个size方法,这个size方法就返回我们当前这个map的一个容量。

    Entry接口定义

    但我们这里呢,还要定义一个呢,还要定义一个interface Entry,为什么要定义?

    其实原因我在这也可以给大家说一下,就是我们在这定一个的目的,是让我们实现这个接口,

    按我们这个规范,因为接口它实际就是规范。

    好,我们现在在这里呢,就把这个getKey,和我们的getValue,这两个方法给大家来梳理一下。

    写HashMap类

    好,那同样我们现在这里呢,就已经把这样的一个过程呢,定义了一个接口,

    那接下来呢,我们就来写具体的实现。

    那所以我们在这里定义一个HashMap,那我们的HashMap呢,它也是支持泛型的,

    它实现我们的Map接口对吧,然后呢,我们去实现它的这个方法,

    OK,那刚刚在这里呢,我们还要定义一个class,它是一个内部类叫Entry对象,

    然后它去实现我们刚才在这个Map接口里面,定义的Entry接口,然后对它进行实现。

    好,那整个的一个框架,已经给大家去梳理了,那接下来就是我们去干什么呢?

    我们去手写实现。接下来就把整个这个代码过程,把put和get的方法全部给大家梳理一遍。

    也就是说已经给大家把这个HashMap这个框架已经整理好了,那接下来就是把每个方法的实现,

    给大家去实现。好,大家想不想看,马上给你们表演铁锤炸弹、胸口碎大石。

    定义成员属性

    那刚刚我们讲过啊,我们在这里呢,它是一个数组对吧,那数组的话我们应该怎么去定义呢?

    无非就是用这个中括号来进行代替。那么我想问一下,那我这个数组它的类型是什么?

    这个类型是不是Object。我们这个Object是不是在这里,就是我们每一个节点都是一个Object,

    而这个Object我现在定义什么?

    我们现在定义为Entry吧,所以在这里呢,实际它就是一个Entry对象。

    OK,所以在这里呢,我把它设置为空,如果要对它进行初始化,在我的这个构造方法的时候,

    就对它进行初始化,table等于咱们这个Entry这个数组,然后呢,我们定义为容量多少,

    定义为16。那我们现在在这里就已经定义了这个值,然后呢,我们还定义一个size等于0,

    然后在这里呢,我们返回这个size对吧

     好这里呢,就是我们的一些成员属性,定义好了。

    好今天就到这里,整个的一个框架,已经给大家去梳理了,属性也定义了!

    下一篇介绍 写put方法的思路、存储出现哈希冲突等情况

  • 相关阅读:
    【毕业设计】深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
    Vosviewer的安装与使用
    C++单例模式终极指南,深度解析不同应用场景,学单例这一篇就够了
    代码随想录50——动态规划: 123买卖股票的最佳时机III、188买卖股票的最佳时机IV
    Postgresql数据类型-数字类型
    web前端设计与开发期末作品 用DIV CSS技术设计的网上书城网页与实现制作(大一Web课程设计)
    OneFlow如何做静态图的算子对齐任务
    springmvc总结
    光线追踪7 - 抗锯齿(Antialiasing)
    SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
  • 原文地址:https://blog.csdn.net/YuDBL/article/details/126054906