随笔4 Dictionary<K,V>
本来说是想介绍一下Hashtable的,但是发现HashMap和Hashtable最开始的不同就是在于HashMap继承了AbstractMap,而Hashtable继承了Dictionary<K,V>,所以决定先介绍一下Dictionary<K,V>。
首先承认Dictionary<K,V>是一个非常古老的抽象类了,并且很久都没有做过更新了。而且基于它产生了Hashtable也在之后被ConcurrentHashMap这个线程安全的Map代替了。写到这里我真的是有点不想写了,毕竟是一个过时的东西,但是面试偶尔还要问。
Dictionary和Map其实很相似,都是表示一种键值对,就是换了一个称呼而已,在迭代元素的时候用了Enumerator,但是这个东西也是实现了Iterator。把返回的元素叫做Enumeration
接下来看一波源码吧
1 public abstract class Dictionary<K,V> { 2 3 public Dictionary() { 4 } 5 6 /** 7 * 返回现在字典中的元素个数 8 */ 9 abstract public int size(); 10 11 /** 12 * 如果字典中没有元素,返回true,否则返回false 13 */ 14 abstract public boolean isEmpty(); 15 16 /** 17 * 这个Enumeration相当于是一个Iterator,只不过返回的是一个Key的集合,相当于一个HashMap的KeyIterator 18 */ 19 abstract public Enumeration<K> keys(); 20 21 /** 22 * 这个Enumeration相当于是一个Iterator,只不过返回的是一个value的集合,相当于一个HashMap的ValueIterator 23 */ 24 abstract public Enumeration<V> elements(); 25 26 /** 27 * 通过key查找对应元素的value值 28 */ 29 abstract public V get(Object key); 30 31 /** 32 * 放入一个键值对,如果key以前存在,则返回原来的值,否则返回null 33 */ 34 abstract public V put(K key, V value); 35 36 /** 37 * 删除key对应的键值对,如果key存在返回value,key不存在,返回null 38 */ 39 abstract public V remove(Object key); 40 }
在自己实现一个自己的Dictionary的时候,要注意的是,底层要有key和value的数据结构,并且数据结构实现了Iterator或者自己写一个实现了Iterator的类来满足迭代效果。