HashMap 实现原理详解:数组、链表和红黑树的结合
HashMap 是一种基于哈希表的数据结构,它是由一个数组和链表(或红黑树)组成。
首先,创建一个空的 HashMap 对象。HashMap 拥有两个主要属性:数组 table 和 size。table 是一个 Entry 数组,每个 Entry 包含一个键值对,键和值都是 Object 类型。size 表示 HashMap 中元素的数量。
当我们向 HashMap 中添加一个键值对时,首先将键的 hashCode() 方法返回的值作为哈希表的下标,找到对应的 Entry。如果该 Entry 为 null,则创建一个新的 Entry,将键值对插入到该 Entry 中,并将数组 table 中对应的位置赋值为该 Entry;如果该 Entry 不为 null,则遍历该 Entry 所在的链表(或红黑树),查找是否已经存在相同的键,如果存在,则更新该键对应的值,否则创建一个新的 Entry 插入到链表(或红黑树)的末尾。
当我们从 HashMap 中获取一个键值对时,首先将键的 hashCode() 方法返回的值作为哈希表的下标,找到对应的 Entry。如果该 Entry 为 null,则说明没有找到该键,返回 null;如果该 Entry 不为 null,则遍历该 Entry 所在的链表(或红黑树),查找是否存在相同的键,如果存在,则返回该键对应的值,否则返回 null。
当我们删除 HashMap 中的一个键值对时,首先将键的 hashCode() 方法返回的值作为哈希表的下标,找到对应的 Entry。如果该 Entry 为 null,则说明没有找到该键,无需删除;如果该 Entry 不为 null,则遍历该 Entry 所在的链表(或红黑树),查找是否存在相同的键,如果存在,则删除该键对应的 Entry,并将链表(或红黑树)中的其他 Entry 重新连接;否则无需删除。最后,更新 size 属性的值。
原文地址: https://www.cveoy.top/t/topic/n25h 著作权归作者所有。请勿转载和采集!