一、hashtable
hashtable从jdk1.0开始,该类实现一个键值映射的哈希表,继承dictionary,为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode
方法和 equals
方法;并且不能存储null对象作为key或value。
Hashtable
的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。
初始容量默认为16,加载因子默认为0.75。
通常hashtable初始化一个大小为16的Entry数组table[],存放指向16个桶的索引。
Entry对象包括key, value, next, hash,每当放值时,会实例化Entry对象,并根据key的hashcode()方法,计算哈希值来决定存放数组位置。若有相同的hash值,利用链表来存放,并利用equals()方法来判断是否相等,不等,则放入末尾。通常,默认加载因子(.75)在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查找某个条目的时间(在大多数 Hashtable 操作中,包括 get 和 put 操作,都反映了这一点)。
初始容量主要控制空间消耗与执行 rehash
操作所需要的时间损耗之间的平衡。如果初始容量大于 Hashtable 所包含的最大条目数除以加