java.util.Dictionary源码分析
Dictionary是一个抽象类,Hashtable是它的一个子类。
类的声明:
/**
The <code>Dictionary</code> class is the abstract parent of any
* class, such as <code>Hashtable</code>, which maps keys to values.
* Every key and every value is an object. In any one <tt>Dictionary</tt>
* object, every key is associated with at most one value. Given a
* <tt>Dictionary</tt> and a key, the associated element can be looked up.
* Any non-<code>null</code> object can be used as a key and as a value.
* <p>
* As a rule, the <code>equals</code> method should be used by
* implementations of this class to decide if two keys are the same.
* <p>
* <strong>NOTE: This class is obsolete. New implementations should
* implement the Map interface, rather than extending this class.</strong>
*/
public abstract class Dictionary<K,V>
解释一下上面对Dictionary类的注释,Dictionary类是一个抽象的类,是Hashtable的父类,是一个key->value的映射表,任意key和value是Object,不可以是null。
给一个Dictionary和key,它的value就能找到。equals方法用来判断两个key是否相同。特别注意,这个类已经被废弃了,不建议继续继承这个类,建议去实现Map接口。
这个类之所以仍存在的原因是为了兼容之前使用这个类的系统。
public Dictionary() {//使用默认的无参构造器 } abstract public int size();//返回key的数量 abstract public boolean isEmpty();//如果Dictionary不存在任何一个key-value映射,返回true,否则fasle abstract public Enumeration<K> keys();//返回包含所有key的Emumeration abstract public Enumeration<V> elements();//返回包含所有value的Emumeration abstract public V get(Object key);//根据key,查找对应的value abstract public V put(K key, V value);//插入一个key-value映射,如果key或value为nul,抛出NullPoniterException,如果已经存在相同的key,返回旧的value,如果不存 //在相同的key,则创建一个映射到Dictionary中,返回null abstract public V remove(Object key);//根据key删除一个对应的key-value映射关系,如果Dictionary不存在这个key,相当与什么都没做,如果key是null抛出 //NullPoniterException
虽然Dictionary类已经被废弃了,但是研究一下它的源码还是有好处的,这样才能知道为什么会被废弃掉,以及它的替代品的优势是什么。就比如keys和elements方法返回一个Enumeration,jdk1.2之后有Iterator这个接口,可以实现遍历一个集合的对客户的透明性,以保持低耦合和单一职责原则,实现Iterator接口的迭代器类就可以实现遍历集合了,而真正的客户可以关注管理数据。