本次博客带领大家学习集合中的Map接口实现类-Hashtable。
Hashtable的基本介绍
- 存放的元素是键值对:即K-V。
- Hashtable的键和值都不能为null,否则会抛出NullPointerException异常。
- Hashtable使用方法基本上和HashMap一样。
- Hashtable是线程安全的,HashMap是线程不安全的。
Hashtable的扩容机制
- 底层有数组 Hashtable$Entry 初始化大小为 11。
- 临界值 threshold 8 = 11*0.75。
- 扩容:按照自己的扩容机制来进行即可。
- 执行 方法addEntry(hash, key, value, index); 添加K-V 封装到Entry。
- 当 if (count >= threshold) 满足时。
- 按照 int newCapacity = (oldCapacity << 1) + 1; 的大小扩容。
public class HashTableExercise {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("john",100);//ok
//table.put(null,100);//异常
//table.put("john",null);//异常
table.put("lucy",100);//ok
table.put("lic",100);//ok
table.put("lic",99);//替换
table.put("hello1",1);
table.put("hello2",1);
table.put("hello3",1);
table.put("hello4",1);
table.put("hello5",1);
table.put("hello6",1);
table.put("hello7",1);
System.out.println(table);
}
}
Hashtable 和 HashMap 对比
版本 | 线程安全(同步) | 效率 | 允许null键和null值 | |
---|---|---|---|---|
HashMap | 1.2 | 不安全 | 高 | 可以 |
Hashtable | 1.0 | 安全 | 较低 | 不可以 |