根据前辈的建议,最近在关注Java 的HashMap细节。
HashMap派生自AbstractMap,根据JDK的API描述,今天动手写了一个AbstractMap实现。
AbstractMap实现了Map<K, V>接口,Map<K,V>包含了一个内嵌的Entry<K,V>接口,Entry<K,V>描述了一个键值对,以及基于该键值对的操作。因此,除了Map<K,V>接口,AbstractMap还需要实现自己内嵌的Entry<K,V>接口,分别是SimpleEntry和SimpleImmutableEntry,表示可变和不可边的Entry。实现方法参考AbstractMap的API描述就明白了,注意的是put方法直接抛出了UnsupportedOperationException。
AbstractMap实现的方法都比较简单,由于语言的不熟悉也碰到一些小问题。写完之后,很想知道java自己的版本是如何实现的,度娘后发现原来jdk的目录下面有个src.zip的压缩包,里面就是部分jdk源码。
对照了java的AbstractMap实现,原来没有自己想得那么难,自己的实现大部分都没问题,细节上也能看出人家代码的严谨和规范性,也是值得学习的地方。主要的问题是在获取key,value,key-value集合的函数中,由于对java迭代器的不熟悉不知道如何构造新的集合,参考源码后有了一些了解。
自己动手最大的收获,一方面是对java语法熟悉得快,另一方面也更能加深对API的理解。