zoukankan      html  css  js  c++  java
  • java.util.Hashtable源码分析

    Hashtable实现一个键值映射的表。任何非null的object可以用作key和value。

    为了能存取对象,放在表里的对象必须实现hashCode和equals方法。

    一个Hashtable有两个参数影响,initial capacity和load factor。

    Hashtable是同步化的,如果不需要线程安全的特性,建议使用HashMap,如果需要高度线程安全的特性,建议使用java.util.concurrent.ConcurrentHashMap。也就是说,Hashtable已经算是一个废弃的状态,还存在的意义是为了已经使用了Hashtable的程序能够继续使用,新程序不应该再使用它了。

    public class Hashtable<K,V>
        extends Dictionary<K,V>
        implements Map<K,V>, Cloneable, java.io.Serializable {

    Dictionary是个被废弃的抽象类,从这里也可以看出为什么Hashtable不再被建议使用了。

    Hashtable保证快速失败的机制使用一个modCount的变量。

    public Hashtable(int initialCapacity, float loadFactor) {
            if (initialCapacity < 0)
                throw new IllegalArgumentException("Illegal Capacity: "+
                                                   initialCapacity);
            if (loadFactor <= 0 || Float.isNaN(loadFactor))
                throw new IllegalArgumentException("Illegal Load: "+loadFactor);
    
            if (initialCapacity==0)
                initialCapacity = 1;
            this.loadFactor = loadFactor;
            table = new Entry<?,?>[initialCapacity];
            threshold = (int)Math.min(initialCapacity * loadFactor, MAX_ARRAY_SIZE + 1);
    }
    
    public Hashtable(int initialCapacity) {
            this(initialCapacity, 0.75f);
    }
    
    public Hashtable() {
            this(11, 0.75f);
    }
    
    public Hashtable(Map<? extends K, ? extends V> t) {
            this(Math.max(2*t.size(), 11), 0.75f);
            putAll(t);
    }

    Hashtable的四个构造器,可以看出,它默认的容量大小是11,默认阀值是0.75,(HashMap是16和0.75)。

    对Hashtable的操作就不需要再说了,和HashMap的实现功能都差不多,只是实现的细节有很大的差别。

  • 相关阅读:
    第十二周作业
    第11周学习总结
    第十周学习总结(五一作业)
    第九周作业
    第八周作业
    第七周作业
    PAT1049、1048、1047
    例题3-5,例题4-2,例题4-3
    PAT甲级真题打卡:1002. A+B for Polynomials
    PAT甲级真题打卡:1001.A+B Format
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5744586.html
Copyright © 2011-2022 走看看