自己写一个简单的Map

自己写一个简单的Map

许多许多年以前,在自学Java的时候,笔者曾经写过一个简单的Map,当年很有成就感,拿出来博大家一笑。

Map的实现其实很简单,一个key对应一个value就行

定义一个MyMap类

声明一个Node数组用来存放元素,一个size来记录Map的逻辑长度,看一下Node类,Node类位于MyMap类的内部

该类为内部静态类,只能在MyMap类里访问,定义了一个key,一个value用于存放元素内容。

提供put方法

上图中的indexOfKey方法

提供get方法

size方法

以下是测试代码

测试结果

debug来看一下

最后来画一下MyMap对象在堆内存中的图

在这个MyMap中,放入元素,获取元素,都会去调用indexOfKey方法遍历底层数组,put和get的时间复杂度用大O表示法是O(n),在map元素不多的情况下,凑合着还能用,当map元素过多时,效率下降得非常厉害。

注:1、该示例为了追求简单,并没有实现Map接口,只是简单的写了三个方法,put,get,size,如果要满足JDK中Map的规范,需要实现Map接口,并实现里面的所有方法。2、本示例中,没有考虑到底层数组的扩容,当往里添加10个以上的元素时,会抛出java.lang.ArrayIndexOutOfBoundsException异常(数组下标越界异常),有兴趣的朋友可自行扩展。3、本Map是笔者写着玩的,是想告诉初学者我们也可以写一个简单的Map来自己用,JDK中的HashMap,TreeMap等的实现和这完全不同,切勿对号入座。

下篇文章我们将介绍HashMap的底层实现,看看人家是怎么把性能发挥到极致的。

上一篇:LinkedList与ArrayList元素删除效率PK(写作中)

下一篇:HashMap底层实现原理(上) - 知乎专栏

本专栏所有文章请点击:专栏目录索引


如果喜欢本系列文章,请为我点赞或顺手分享,您的支持是我继续下去的动力,您也可以在评论区留言想了解的内容,有机会本专栏会做讲解,最后别忘了关注一下我。

转载无限欢迎,但请注明「作者」和「原文地址」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。自助转载请点击:rightknights.com/materi

编辑于 2017-08-16

文章被以下专栏收录