Java的HashMap和HashTable有什么区别

小编 122

Java的HashMap和HashTable有以下区别:1.同步性的区别;2.安全性不同;3.父类不同;4.对外提供的接口不同;5.对null的支持不同;6.遍历方式的内部实现上不同。同步性的区别在于,HashMap是非同步的,而Hashtable是同步的。

1.同步性的区别

HashMap是非同步的,而Hashtable是同步的,这意味着哈希表线程安全,可以在多个线程之间共享,但是HashMap如果没有适当的同步,就不能在多个线程之间共享。

2.安全性不同

HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。

Hashtable是线程安全的,它的每个方法上都有synchronized 关键字,因此可直接用于多线程中。

3.父类不同

HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时实现

了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。

4.对外提供的接口不同

Hashtable比HashMap多提供了elments() 和contains() 两个方法。

5.对null的支持不同

Hashtable:key和value都不能为null。

int[] a = new int[4];//推介使用int[] 这种方式初始化

int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]

HashMap:key可以为null,但是这样的key只能有一个,因为必须保证key的少数性;可以有多个key值对应的value为null。

6.遍历方式的内部实现上不同

Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式。

延伸阅读

HashMap是干什么的

HashMap,中文名哈希映射,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。

HashMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点。每一个Entry对象通过Next指针指向它的下一个Entry节点。当新来的Entry映射到冲突的数组位置时,只需要插入到对应的链表即可。

HashMap是基于哈希表的Map 接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

回复

我来回复
  • 暂无回复内容

站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部