线程安全性不同
HashMap是线程不安全的,HashTable是线程安全的,其中的方法是Synchronize的,在多线程并发的情况下,可以直接使用HashTabl,但是使用HashMap时必须自己增加同步处理。
是否提供contains方法
HashMap只有containsValue和containsKey方法;HashTable有contains、containsKey和containsValue三个方法,其中contains和containsValue方法功能相同。
key和value是否允许null值
Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
数组初始化和扩容机制
HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
HashMap与HashTable是Java中两种重要的映射数据结构,它们的主要区别在于线程安全性。HashMap不是线程安全的,适合单线程环境,而HashTable是线程安全的,所有方法都进行了同步,适用于多线程场景。此外,HashTable不允许key和value为null,而HashMap允许。在容量初始化和扩容方面,HashTable的默认容量是11,HashMap则是16,并且HashMap的扩容规则更为灵活。在方法上,HashTable提供了额外的contains方法,与containsValue功能相同。





