那讲的这些知识点能不能用代码来实现,接下来就给大家来表演一下铁锤炸弹,我们用源码验证,
也就是刚才在这里给大家画这个过程,我希望用源码,用我自己手写一个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<K,V>,为什么要定义?
其实原因我在这也可以给大家说一下,就是我们在这定一个的目的,是让我们实现这个接口,
按我们这个规范,因为接口它实际就是规范。
好,我们现在在这里呢,就把这个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方法的思路、存储出现哈希冲突等情况