HashMap和Hashtable的区别

HashMap和Hashtable都是基于哈希表实现的,它们在数据结构、线程安全性、是否允许null值以及扩容策略等方面有所不同。HashMap是非线程安全的,适用于单线程环境,允许key和value为null,而Hashtable是线程安全的,不允许null值,适用于多线程环境。在扩容策略上,HashMap扩容为原容量的2倍,而Hashtable扩容为原容量的2倍加1。此外,HashMap在JDK1.8后,当链表长度超过8时,会转换为红黑树以优化性能。
摘要由CSDN通过智能技术生成

我们知道,HashMap和HashTable都是基于哈希表完成的,那我们首先来回顾哈希表的知识。

哈希表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表。

数据的物理存储结构:顺序存储 + 链式存储
我们先大概了解下其他数据结构在增、删、查等基础操作执行性能。

数据结构
数组 采用一段连续的存储单元来存储数据 一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n) (1)指定下标的查找,时间复杂度为O(1) (2)给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n) (3)有序数组,则可采用二分查找,时间复杂度提高为O(logn)
线性链表 找到指定位置,处理结点间的引用,时间复杂度为O(1) 遍历链表逐一比对,复杂度为O(n) 找到指定位置,处理结点间的引用,时间复杂度为O(1)
二叉树 一棵相对平衡的有序二叉树,平均复杂度均为O(logn) 一棵相对平衡的有序二叉树,平均复杂度均为O(logn) 一棵相对平衡的有序二叉树,平均复杂度均为O(logn)
哈希表 不考虑哈希冲突,一次定位即可,时间复杂度为O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值