其中可以得知clone也是可以进行相关的实例化操作的。
其中hashtable的初始容量如下所示:
Hashtable的初始容量是11,装载因子也是0.75.
其中对对于hashmap和hashtable的一个对比相关的过程,如下所示:
其中因为hashtable是因为syechronized因此是线程安全的。
其中hashtable的构造函数是的默认的参数分别是11和0,75,
需要扩容时的一个重要的参数指标是初始容量*0.75小于thresold,也就是需要扩容的时候了。
再一次验证clone也是可以进行实例化操作的。
hashtable的安全性的检测和对比,
源码分析:
entry是需要用的时候才会被创建的,平时是不会被创建的。
public synchronized V put(K key, V value) {
//根据源码可以得知,put进去的时候,加了一个锁,也是hashmap和hashtable一个很大的区别。
// Make sure the value is not null
if (value == null) {
//这里进行一个校验,value的值是不允许为空的
throw new NullPointerException();
}
// Makes sure the key is not already in the hashtable.
Entry<?,?> tab[] = table;
int hash = key.hashCode(); //根据key来做一个hash
int index = (hash & 0x7FFFFFFF) % tab.length; //进行一个hash分区
@SuppressWarnings("unchecked")
Entry<K,V> entry = (Entry<K,V>)tab[index]; //创建相应的数组,进行一个entry的创造。
for(; entry != null ; entry = entry.next) {
if ((entry.hash == hash) && entry.key.equals(key)) {
//以上代码很好说明了为什么既要进行equals也要进行hash函数生成唯一值。
V old = entry.value;
entry.value = value;
return old;
}
}
addEntry(hash, key, value, index);
return null;
}