一,思路
1,词典实现类ArrayDictionary.java肯定要implements 词典的接口DictionaryInterface.java(参考:http://www.cnblogs.com/hapjin/p/4573826.html)。其次,为了序列化,还要implements Serializable接口
2,由于词典中的每个元素是一个键值对。因此,需要将查找键 和 值 封装在同一个对象中,因而定义了Entry.java来表示词典中的每个元素。其中,Entry类是作为ArrayDictionary的内部类来实现的。
3,由于每个Entry对象表示一个词典元素,因此ArrayDictionary.java需要一个Entry类型的数组来存放词典元素。这也是文章的标题--借助顺序表来实现词典的原因。
再深入讨论下,我们知道在JAVA类库中ArrayList.java就相当于已经帮程序员实现好了一个顺序表(数组),我们不需要再去关注数组的具体实现细节以及如何遍历数组,而是直接用ArrayList.java中的各种方法(add,remove……)来完成数组的基本操作,通过 iterator()方法获得遍历数组的迭代器。也可以借助ArrayList.java中方法来辅助实现DictionaryInterface接口中定义的方法。
但是,在本例中,采用的是自定义数组来实现词典的,因此就需要根据DictionaryInterface接口中的方法以及自已的需要来完成ArrayDictionary.java中的方法。
下面,具体理清下迭代器的实现思路:在ArrayDictionary.java中定义了三个私有内部类分为表示实现三个迭代器:
class EntryIterator<Entry>实现遍历Entry数组的迭代器
class KeyIterator<K>实现遍历查找键的迭代器
class ValueIterator<V>实现 值(Value) 的迭代器
其中,后两个迭代器会用到遍历Entry数组的迭代器,因为键(Key)和值(Value)是封装在Entry中的。
同时,还在ArrayDictionary.java定义了三个相应的获取遍历器的方法来获取上述三个遍历器。
未完待续……