Java容器解析系列(15) HashTable Dictionary & Properties

HashTable的实现原理与HashMap没有什么区别;

其与HashMap的主要区别如下:

  1. 添加进入jdk时间:HashTable在jdk1.0时添加,HashMap在jdk1.2时添加;
  2. 类签名:两者都实现了Map接口,但是HashMap继承自AbstractMap,HashTable继承自Dictionary;
  3. HashMap允许key和value为null,HashTable不允许key和value为null;
  4. HashMap不是线程安全的,HashTable线程安全,每个方法要么是synchronized,要么被synchronized方法调用;
  5. HashTable可以Enumeration进行遍历;
  6. HashTable已经不推荐使用,如果需要线程安全的Map,可以使用Collections.synchronizedMap();

Dictionary类定义如下:

/**
 * 
 * 保存键值对;
 * key和value均不能为null;
 * 该类已被废弃,新的实现应该实现Map接口;
 * 
 * @since JDK1.0
 */
public abstract class Dictionary<K, V> {

    public Dictionary() {
    }

    abstract public int size();
    abstract public boolean isEmpty();
    // 返回所有 key 的Enumeration
    abstract public Enumeration<K> keys();
    // 返回所有 value 的Enumeration
    abstract public Enumeration<V> elements();
    abstract public V get(Object key);
    abstract public V put(K key, V value);
    abstract public V remove(Object key);

}

HashTable其实还有一个子类:Properties.用于保存和读取key-value属性,并可以将属性持久化到属性文件中;
关于Properties,可以查看Java中Properties类的操作java读取Properties文件的六种方法