问:HashMap底层数据结构是怎样的
答:HashMap的底层数据结构主要由数组和链表(或红黑树)组成。
HashMap内部维护了一个Entry数组,用于存储键值对对象Entry。数组的每个元素都是一个单向链表的头节点,如果发生哈希冲突(即两个不同的键经过哈希运算得到的数组索引位置相同),则将新的键值对添加到对应索引位置的链表中。
链表节点包含键、值和指向下一个节点的指针。在Java 8之后,当链表长度达到一定阈值时(默认为8),链表会自动转换为红黑树,以提高查找效率。
红黑树是一种自平衡的二叉搜索树,它的插入、删除和查找操作的时间复杂度都是O(log n),相比于链表,红黑树在查找效率上更高。
通过哈希函数将键映射到数组索引位置,可以快速定位到对应的链表或红黑树,然后在链表或红黑树中进行查找、插入或删除操作。HashMap通过哈希表的数据结构,实现了高效的键值对存储和查找。