HashTable 与HashMap区别

简介: HashTable 与HashMap区别

HashTable 与HashMap区别

1.HashTable 线程是安全的

2.HashMap 线程是不安全

3.HashMap  允许存放key值 null 存放在  index=0位置

4.HashTable  不允许存放key为null


1,HashMap实现不同步,线程不安全。  HashTable线程安全  HashMap中的key-value都是存储在Entry中的。  

2,继承不同。

3Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。  

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

5,哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值


为什么不使用HashTable

HashTable 底层 通过 synchronized 保证线程安全性问题

保证线程安全性问题---加上锁---发生锁的竞争

HashTable 当多个线程 在访问 get或者put操作的时候会发生this锁的竞争,多个线程竞争锁 最终只会有一个线程获取到this锁,获取不到的this锁 可能会阻塞等待。最终将我们的 HashTable 中 get 或者put方法改成单线程执行 效率是非常的低。

在多线程的情况下 不推荐使用 HashTable ConcurrentHashMap

1.使用传统HashTable保证线程问题,是采用synchronized锁将整个HashTable中的数组锁住,在多个线程中只允许一个线程访问Put或者Get,效率非常低,但是能够保证线程安全问题。

2.Jdk官方不推荐在多线程的情况下使用HashTable或者HashMap,建议使用ConcurrentHashMap分段HashMap,效率非常高。

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

热门文章

最新文章