HashMap 底层

HashMap 底层就是一个数组结构(Entry<K,V>[] table) 可以看出,Entry 就是数组中的元素,每个 Map.Entry 其实就是 一个 key-value 对,它持有一个指向下一个元素的引用,这就构成了链表。

hashmap 的数据结构
要知道 hashmap 是什么,首先要搞清楚它的数据结构,在 java 编程语言中,最基本的结构就是两种,一个是 数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap 也不例外。 Hashmap 实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表 示数组,纵排表示数组元素【实际上是一个链表】)。
在这里插入图片描述

HashMap 的工作原理

HashMap 基于 hashing 原理,我们通过 put()和 get()方法储存和获取对象。当我们将键值对传递给 put()方法 时,它调用键对象的 hashCode()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。当获取对象时, 通过键对象的 equals()方法找到正确的键值对,然后返回值对象。HashMap 使用链表来解决碰撞问题,当发生 碰撞了,对象将会储存在链表的下一个节点中。 HashMap 在每个链表节点中储存键值对对象。

当两个不同的键对象的 hashcode 相同时会发生什么?
它们会储存在同一个 bucket 位置的链表中。键对象的 equals()方法用来找到键值对。

因为 HashMap 的好处非常多,我曾经在电子商务的应用中使用 HashMap 作为缓存。因为金融领域非常多的运用 Java,也出于性能的考虑,我们会经常用到 HashMap 和 ConcurrentHashMap。

猜你喜欢

转载自blog.csdn.net/qq_42795915/article/details/84193269
今日推荐