HashMap 与 HashTable的区别

博客介绍了HashMap和HashTable的特点及区别。HashMap实现Map接口,非线程同步、不安全,键和值可null;HashTable也实现Map接口,线程同步、安全,键不能为null。此外,还提到HashMap遍历修改会抛异常及同步Hash Map。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap

  • 实现了Map接口
  • 非线程同步,非线程安全
  • 不允许重复键
  • 键和值均允许为null
HashMap<Interger,String> employeeHashmap=new HashMap<Integer,String>();
employeeHashmap.put(1,"Arpit");
employeeHashmap.put(2,null);  // will work fine

HashTable

  • 实现了Map接口
  • 线程同步,线程安全
  • 不允许重复键
  • 键不允许为null,值为空时,运行时会抛出NPE
Hashtable<Interger,String> employeeHashmap=new Hashtable<Integer,String>();
employeeHashmap.put(1,"Arpit");
employeeHashmap.put(2,null);  //not allowed and will throw NullPointer exception at run time

Hashtable vs HashMap

ParameterHashTableHashMap
线程安全
线程同步
性能因为线程安全,所以性能一般比HashMap慢单线程环境下,性能比HashTable快,因为单线程环境下推荐使用Hash Map
空键不允许键和值都不允许为空
Fail FastHashTable中的元素遍历不支持FailFastHashTable中的元素遍历支持FailFast
父类DictionaryAbstractMap
替代类多线程环境下可以使用ConcurrentHashMap

Fail-fast: 如果一个线程正在遍历HashMap,同时另一个线程试图修改(指删除或者插入HashMap等试图改变HashMap结构的行为),就会抛出ConcurrentModification Exception

同步Hash Map

Map map=Collections.synchonizedMap(hashmap)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值