随笔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的类来满足迭代效果。

posted on 2018-04-16 00:29  徐彬彬要好好学习  阅读(162)  评论(0编辑  收藏  举报