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的实现功能都差不多,只是实现的细节有很大的差别。

  • 相关阅读:
    C# 网络编程之基于SMTP发送电子邮件
    C#实现邮件发送的功能
    Java发邮件基础篇
    java发送邮件高级篇
    Windows下bat脚本自动发邮件
    Python发送QQ邮件
    信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
    DOS命令整理
    JAVA对时间的操作
    JAVA 调用HTTP接口POST或GET实现方式(转)
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5744586.html
Copyright © 2011-2022 走看看