首页 理论教育 Java程序设计教程:HashMap集合

Java程序设计教程:HashMap集合

时间:2023-11-16 理论教育 版权反馈
【摘要】:正因为这样特殊的存储结构,HashMap 集合对于元素的增、删、改、查操作表现出的效率都比较高。在哈希表结构中,主体结构为图中水平方向的数组结构,其长度称为HashMap 集合的容量。所以,从性能方面考虑,HashMap 中的链表出现越少,性能才会越好,这就要求HashMap 集合中的桶越多越好。HashMap 根据实际情况,内部实现了动态地分配桶数量的策略。图7.7HashMap 集合的内部结构

Java程序设计教程:HashMap集合

HashMap 集合是Map 接口的一个实现类,用于存储键值映射关系,该集合的键和值允许为空,但键不能重复,且集合中的元素是无序的。HashMap 底层是由哈希表结构组成的,其实就是“数组+链表”的组合体,数组是HashMap 的主体结构,链表则主要是为了解决哈希值冲突而存在的分支结构。正因为这样特殊的存储结构,HashMap 集合对于元素的增、删、改、查操作表现出的效率都比较高。

1. HashMap 集合的内部结构

HashMap 集合的内部结构组成如图7.7 所示。

(1)在哈希表结构中,主体结构为图中水平方向的数组结构,其长度称为HashMap 集合的容量(capacity)。

(2)数组结构垂直对应的是链表结构,链表结构称为一个桶(bucket),每个桶的位置在集合中都有对应的桶值,用于快速定位集合元素添加、查找时的位置。(www.xing528.com)

使用HashMap 集合时,如果通过键对象k 定位到的桶位置不含链表结构,那么对于查找、添加等操作很快;如果定位到的桶位置包含链表结构,对于添加操作,其时间复杂度依然不大,因为最新的元素会插入链表头部,只需要简单改变引用链即可;而对于查找操作来讲,此时就需要遍历链表,然后通过键对象k 的equals(k)方法逐一查找比对。所以,从性能方面考虑,HashMap 中的链表出现越少,性能才会越好,这就要求HashMap 集合中的桶越多越好。

HashMap 根据实际情况,内部实现了动态地分配桶数量的策略。通过new HashMap()方法创建HashMap 时,会默认集合容量capacity 大小为16,加载因子loadFactor 为0.75(HashMap桶多少权衡策略的经验值),此时该集合桶的阈值就为12(容量capacity 与加载因子loadFactor的乘积),如果向HashMap 集合中不断添加完全不同的键值对<k,v>,当超过12 个存储元素时,HashMap 集合就会默认新增加一倍桶的数量(也就是集合的容量),此时集合容量就变为32。

图7.7 HashMap 集合的内部结构

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈