本次博客带领大家学习集合中的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 | 安全 | 较低 | 不可以 |
本文深入探讨了Java集合中的Hashtable接口实现类,包括其基本介绍、线程安全性、扩容机制以及与HashMap的对比。Hashtable不允许键值为null,且是线程安全的,适合多线程环境。而HashMap则更注重效率,非线程安全,允许null键值。通过示例代码展示了Hashtable的使用方法,以及在达到临界值时如何扩容。
984

被折叠的 条评论
为什么被折叠?



