Hashtable<K,V>源码详解(基于jdk1.8.0_162)
介绍:Hashtable<K,V>是一种键值对存储结构。
Hashtable<K,V>底层实现方式为数组+单链表了。
Hashtable<K,V>是线程安全的。加锁的方式,把整个方法加锁,容易造成线程等待。
Hashtable<K,V>基于哈希法(散列法)实现。
哈希法(散列法)特性:hashCode可能会有相同的情况,相同时称为哈希冲突。所以判断元素是否相同时,需要用hashCode和equals的方式一起判断,两者都返回true,才确定唯一元素。
备注:Hashtable和HashMap实现差不多,区别在于Hashtable是线程安全,而HashMap非线程安全。
一、类图
二、构造方法
1)Hashtable()
构造一个空的Hashtable,默认初始容量(11)和默认负载系数(0.75)。
2)Hashtable(int initialCapacity)
构造一个空的 Hashtable,具有指定的初始容量和默认负载系数(0.75)。
3)Hashtable(int initialCapacity, float loadFactor)
构造一个空的 Hashtable具有指定的初始容量和负载系数。
4)Hashtable(Map<? extends K,? extends V> m)
构造一个新的 Hashtable与指定的相同的映射Map 。
三)添加
1)put(K key, V value) :添加指定key和value到Hashtable中。
2)putAll(Map<? extends K,? extends V> m) :将m的值全部插入到Hashtable中。
四)修改
1)replace(K key, V value) :查找hashCode和key全部相同的节点,替换value,针对于key处理。
2)replace(K key, V oldValue, V newValue) :查找hashCode和key和value全部相同的节点,替换成newValue。
备注:put添加方式也是一种另类的修改,只不过性能会比replace差一些(因为需要判断是否扩容等等)。
五)查找
1)get(Object key) :查找hashCode和key全部相同的节点,并返回。
六)删除
1)remove(Object key) :删除指定的key的条目(hashCode和key全部相同)。
2)remove(Object key, Object value) :只有key和value都匹配时,才删除条目。
七)迭代
1)keySet():返回HashMap所有的key,只需要获取key情况下,可选该方式。
2)entrySet():返回HashMap所有的key和value,推荐使用。
/**
* 获取key列表
*/
public static void keySet() {
Hashtable<String, Object> map = new Hashtable<String, Object>();
Set<String> set = map.keySet();
for (String key : set) {
System.out.println("key: " + key);
}
}
/**
* 获取key和value列表(推荐使用)
*/
public static void entrySet() {
Hashtable<String, Object> map = new Hashtable<String, Object>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!