HashMap 和 HashTable 的区别

简介: HashMap 和 HashTable 的区别

1. 继承不同

HashMap 是 Java1.2 引进的 Map 接口的实现;HashTable 是基于陈旧的 Dictionary 类。

2. 线程安全性不同

HashMap 是非同步、线程不安全的;HashTable 是同步、线程安全的,它的方法里添加 synchronized 关键字来确保线程同步,在多线程并发情况下,可以直接使用 HashTable。并发情况下如果要使用 HashMap 的话,需要自己增加同步处理,也就是加锁操作。

3. 是否提供 contains 方法

HashMap 只有 containsValue 和 containsKey 方法;HashTable 有 contains、containsValue 和 containsKey 三个方法,其中 contains 和 containsValue 方法功能相同。

4.key 和 value 是否允许 null 值

HashMap 中,null 可以作为键,但只能有一个键为 null,同时允许有一个或多个键对应的值为 null;当 get()方法返回 null 值时,则可以表示 HashMap 中没有该键,也可以表示该键所对应的值为 null,因此在 HashMap 中不能由 get()方法来判断 HashMap 中是否存在某个键,而应该用 containsKey()方法来判断。

而 HashTable 中 key 和 value 都不允许出现 null 值。

5. 数组初始化和扩容机制

HashTable 在不指定容量的情况下默认容量为 11,而 HashMap 为 16;HashTable 不要求底层数组的容量一定要为 2 的整数次幂,而 HashMap 则要求一定为 2 的整数次幂。

HashTable 扩容时,将容量变为原来的 2 倍加 1,而 HashMap 扩容时将容量变为原来的 2 倍。

相关文章
|
6月前
|
安全 Java
HashMap和Hashtable的区别
HashMap和Hashtable的区别
34 2
|
4月前
|
安全 算法
HashMap和Hashtable 的区别
HashMap和Hashtable 的区别
19 0
|
5月前
|
存储 安全 Java
HashMap和HashTable的区别
HashMap和HashTable的区别
23 0
|
5月前
|
存储 容器
Hashmap1.7和1.8区别
Hashmap1.7和1.8区别
68 0
Hashmap1.7和1.8区别
|
10月前
|
安全
Hashtable与ConcurrentHashMap的区别
Hashtable与ConcurrentHashMap的区别
|
存储 安全 Java
HashMap和Hashtable以及ConcurrentHashMap的区别
HashMap是在JDK1.2中引入的Map的实现类。
274 0
|
存储 安全
HashTable 与HashMap区别
HashTable 与HashMap区别
81 0
|
存储 安全 算法
HashMap和Hashtable的联系与区别
HashMap和Hashtable的联系与区别
137 0
HashMap和Hashtable的联系与区别
|
安全 Java
HashMap与HashTable的区别
HashMap与HashTable的区别
89 0
IntObjectHashMap和HashMap的区别?
IntObjectHashMap和HashMap的区别?
352 0
IntObjectHashMap和HashMap的区别?