HashTable
// Hashtable保存key-value的数组。
// Hashtable是采用拉链法实现的,每一个Entry本质上是一个单向链表
private transient Entry<?,?>[] table;
// Hashtable中元素的实际数量
private transient int count;
// 阈值,用于判断是否需要调整Hashtable的容量(threshold = 容量*加载因子)
private int threshold;
// 加载因子
private float loadFactor;
// Hashtable被改变的次数
private transient int modCount = 0;
最大值减去8
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
// Hashtable的“key的集合”。它是一个Set,意味着没有重复元素 Set;
private transient volatile Set<K> key
// Hashtable的“key-value的集合”。它是一个Set,意味着没有重复元素
private transient volatile Set<Map.Entry<K,V>> entrySet;
// Hashtable的“key-value的集合”。它是一个Collection,意味着可以有重复元素
private transient volatile Collection<V> values;
构造函数:
构造函数1:
构造函数2:
构造函数3:
构造函数4:
获取大小和是否为空
// 返回“所有key”的枚举对象
// 返回“所有value”的枚举对象
// 判断Hashtable是否包含“值(value)”
// 判断Hashtable是否包含key
// 返回key对应的value,没有的话返回null
// 调整Hashtable的长度,将长度变成原来的(2倍+1) 133 // (01) 将“旧的Entry数组”赋值给一个临时变量。 134 // (02) 创建一个“新的Entry数组”,并赋值给“旧的Entry数组” 135 // (03) 将“Hashtable”中的全部元素依次添加到“新的Entry数组”中
// 将“key-value”添加到Hashtable中
// 删除Hashtable中键为key的元素
// 将“Map(t)”的中全部元素逐一添加到Hashtable中
// 将Hashtable的table数组的值全部设为null
// 克隆一个Hashtable,并以Object的形式返回。
// 获取Hashtable的枚举类对象
// 若Hashtable的实际大小为0,则返回“空枚举类”对象;
// 否则,返回正常的Enumerator的对象。(Enumerator实现了迭代器和枚举两个接口)
// 获取Hashtable的迭代器
// 返回一个被synchronizedSet封装后的KeySet对象
// synchronizedSet封装的目的是对KeySet的所有方法都添加synchronized,实现多线程同步
// 返回一个被synchronizedSet封装后的EntrySet对象
// synchronizedSet封装的目的是对EntrySet的所有方法都添加synchronized,实现多线程同步
// 返回一个被synchronizedCollection封装后的ValueCollection对象
// synchronizedCollection封装的目的是对ValueCollection的所有方法都添加synchronized,实现多线程同步
// 重新equals()函数
// 若两个Hashtable的所有key-value键值对都相等,则判断它们两个相等
// 计算Hashtable的哈希值
// 若 Hashtable的实际大小为0 或者 加载因子<0,则返回0。
// 否则,返回“Hashtable中的每个Entry的key和value的异或值 的总和”。
遍历:
替换所有:
删除:
替换:
参考:
https://www.cnblogs.com/wang-meng/p/5720805.html