HashTable的基本介绍
1、存放的元素是键值对:即K-V
2、hashtable的键和值都不能为null,否则会抛出NullPointerExce
3、hashTable使用方法基本上和HashMap一样
4、hashTable是线程安全的,hashMap是线程不安全的
5、简单看下底层结构
HashTable的应用案例
//下面的代码是否正确,如果错误,为什么
table.put("john",100);//ok
table.put(null,100);//异常,Key不能为空
table.put("john",null);//异常,value不能为空
table.put("lucy",100);//ok
table.put("lic",100);//ok
table.put("lic",88);//替换
sout(table);
import java.util.Hashtable;
/**
* @ClassName HashTableExercise
* @Description
* @Author 小黄debug
* @Date 2022/3/13 21:59
* @Version 1.0
**/
public class HashTableExercise {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("john", 100);//ok
//table.put(null, 100);//空指针异常,Key不能为空
//table.put("john", null);//空指针异常,value不能为空
table.put("lucy", 100);//ok
table.put("lic", 100);//ok
table.put("lic", 88);//替换
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的底层
//1.底层有数组 Hashtable$#ntry[] 初始化大小为11
//2.临界值 threshold 8 = 11 * 0.75
//3.扩容:按照自己的扩容机制来进行即可
//4.执行 方法 addEntry(hash,key,value,index); 添加K-V
//5.当 if(count >= threshold)满足时,就进行扩容
//6.按照 int newCapacity = (oldCapacity << 1)+1;的大小扩容
}
}
Hashtable和HashMap对比
版本 | 线程安全(同步) | 效率 | 允许null键null值 | |
HashMap | 1.2 | 不安全 | 高 | 可以 |
Hashtable | 1.0 | 安全 | 较低 | 不可以 |