HashTable 和HashMap的区别

本文介绍了Map接口的基本概念,重点比较了HashTable和HashMap在数据结构、同步、遍历和扩容方面的区别。同时,讨论了它们在键值对操作和线程安全性的差异。

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

Map的概述

Map是一个接口,提供了一种映射关系,其中的元素都是以键值对的形式存储的,能够根据key快速找到value

        特点:键(key)不能重复,值(value)可以重复


HashTable 和 HashMap 的概述

  • 二者底层的数据结构实现都是链表+数组的方式实现的
  • HashTable继承了 Dictionary,但是这个类已经过时了,一般我们现在都是实现的Map接口,而不是扩展Dictionary这个类。HashTable实现了一个哈希表,它将键(key)映射到值(value)。任何非null对象都可以用作键值或值,即HashTable不允许(key或value)为空值
  • HashMap是Map接口的实现类,基于哈希表的实现的Map接口,不保证映射顺序,即键(key)无序且唯一,值有序且可重复,HashMap允许设置键(key)和值(value)设置为空值

同步问题比较

  • HashTable是同步的,即线程安全,使用synchronize来实现同步问题。
  • HashMap是不同步的,即线程不安全,因此效率比HashTable要高。

遍历方式的区别

  • HashTable使用Iterator和Enumeration来进行遍历
  • HashMap使用Iterator来遍历

扩容机制

  • HashTable默认容量大小为11;默认的加载因子为0.75、当数据存储达到:11*0.75=8阈值的时候开始扩容,扩容方法为(原来的容量*2+1)
  • HashMap默认容量大小为16,加载因此默认为0.75,当数据存储到达16*0.75=12阈值的时候开始进行扩容,扩容方法为(原来的容量*2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值