专栏首页凯哥JavahashMap怎么保证hash一致性的

hashMap怎么保证hash一致性的

学Java的都知道hashMap的底层是“链表散列”的数据结构也也可以说是hash表。在put的实话先根据key的hashcode重新计算hash值的,而我们又知道hash是一种算法。所以哈希码并不是完全唯一的。

查看哈希码百科:

哈希表可以说就是数组链表,底层还是数组但是这个数组每一项就是一个链表

一:为什么说hashmap的put方法是根据key进行hashcode计算的呢?

查看源码:

在查看hash方法,如下:

查看putVal方法:

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,

boolean evict) {

Node

[] tab; Node

p; int n, i;

if ((tab = table) == null || (n = tab.length) == 0)

n = (tab = resize()).length;

if ((p = tab[i = (n - 1) & hash]) == null)

tab[i] = newNode(hash, key, value, null);

else {

Node

e; K k;

if (p.hash == hash &&

((k = p.key) == key || (key != null && key.equals(k))))

e = p;

else if (p instanceof TreeNode)

e = ((TreeNode

)p).putTre且还有next。就循环取出进行比较。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java通过redis管理你的集群定时任务

    早在实习的时候,笔者就接触了spring-task和quartz框架,相信任何java程序员都会有定时任务的需求,在单机上使用定时任务是非常简单的,但是在集群环...

    凯哥Java
  • document.createElement()的用法

    分析代码时,发现自己的盲点——document.createElement(),冲浪一番,总结了点经验。

    凯哥Java
  • 单例模式只有饿汉式和懒汉式吗?这几种单例模式你见过吗

    单例模式有几种?饿汉式、懒汉式。这两种是最常见的。还有几种是对其扩展的。具体如下:

    凯哥Java
  • HashMap实现原理

    从上面的表中可以看到当桶中元素到达8个的时候,概率已经变得非常小,也就是说用0.75作为加载因子,每个碰撞位置的链表长度超过8个是几乎不可能的。 为什么是16...

    OPice
  • Java中HashMap源码分析

    JDK的1.6,1.7版本中,HashMap使用数组+链表来实现的,通过计算Map中的key的的hash值来确定该key在数组中index的位置。计算key在数...

    用户6182664
  • Hashmap源码阅读

    HashMap是什么想必大家都是知道的,日常开发中经常使用,而且常驻于笔试题目及面试中,那么今天将从源码的角度来深入理解一下HashMap。

    呼延十
  • HashMap JDK8的原理讲解

    本文讲解 HashMap JDK 8 的原理,结合源码,只分析 put ,get ,resize 方法的流程。

    胖虎
  • HashMap源码

    在put源码中,且有一段循环遍历就是为了防止存在相同的 key 值,若发现两个 hash 值(key)相同时,HashMap 的处理方式是用新 value 替换...

    小土豆Yuki
  • HashMap原理&技术知识整理

    HashMap涉及的技术点非常多,典型的数据结构和算法有机结合,JDK对HashMap优化变化中不断权衡时间复杂和空间复杂度。

    glumes
  • 最通俗易懂的 HashMap 源码分析解读

    HashMap 作为最常用的集合类之一,有必要深入浅出的了解一下。这篇文章会深入到 HashMap 源码,刨析它的存储结构以及工作机制。

    未读代码

扫码关注云+社区

领取腾讯云代金券