HashMap的实现原理(简要概述)
HashMap的实现原理(简要概述)
基于哈希算法实现的,它通过put存储,通过get取值.
当传入一个key时,HashMap会根据key.hashCode()计算出哈希值,然后根据这个哈希值将value保存到哈希桶中.
原理分析:
从结构上来说,HashMap是由数组+链表+红黑树实现的,(最初主要是通过数组存储,链表是为了解决哈希冲突,但是在哈希碰撞次数大于一定的量时,就需要引用红黑树来处理了)源码写在下面
static class Node<K,V> implements Map.Entry<K,V> {//定义数组索引的位置final int hash;//K,Vfinal K key;V value;//定义下一个链表的节点Node<K,V> next;Node(int hash, K key, V value, Node<K,V> next) {this.hash = hash;this.key = key;this.value = value;this.next = next;}//获取K,V 的值public final K getKey() { return key; }public final V getValue() { return value; }public final String toString() { return key + "=" + value; }//获取hashCode值public final int hashCode() {return Objects.hashCode(key) ^ Objects.hashCode(value);}//设置value public final V setValue(V newValue) {V oldValue = value;value = newValue;return oldValue;}//判断是否相等public final boolean equals(Object o) {if (o == this)return true;if (o instanceof Map.Entry) {Map.Entry<?,?> e = (Map.Entry<?,?>)o;if (Objects.equals(key, e.getKey()) &&Objects.equals(value, e.getValue()))return true;}return false;}
}
--------------------------------------------------------
HashMap是使用哈希表来存储的,为了解决哈希冲突,我们通常采用链地址法,简而言之就是说采用数组加链表的结合,每一个数组元素上都有一个链表结构。通过get获取到数据时,可以获取到数组的下表,然后把数据(value)放到对应下表的链表上。 系统调用这个key的hashCode方法得到hashCode值,然后通过高位和取模运算来定位键值对的存储位置。但是当发生两个key定位到相同位置的时候,就发生了哈希冲突。
哈希冲突?
哈希表存储数据是通过键值对(key-value)的方式存储的,一个key对应一个value,但是也可能发生特殊情况,可能两个不同的key值在经过哈希运算后得到同样的结果,这样就是哈希冲突(碰撞)。
关于哈希表的初始化长度
哈希表的初始化长度length=16 , 负载因子(LoadFactor)默认值=0.75
threshod = length * LoadFactor (阈值=初始长度*负载因子)
阈值就是允许的最大元素数目,超过这个数目就会重新扩容
HashMap的实现原理(简要概述)相关推荐
- 三极管 和 场效应管 的工作原理 简要概述
晶体管的概念 严格意义上讲,晶体管泛指一切以半导体材料为基础的单一元件,包括各种半导体材料制成的二极管.三极管.场效应管.可控硅等,但是国内习惯上,把晶体管有时多用来指晶体三极管. 三极管,全称应为半 ...
- Kafka工作原理简要概述
1.整体流程 流程图 词汇 topic:主题 producer:生产者 consumer:消费者 consumer-group:消费者组 offset:偏移量 follower:副本 要点概述 kaf ...
- java HashMap的实现原理
深入Java集合学习系列:HashMap的实现原理 原文:http://zhangshixi.iteye.com/blog/672697 1. HashMap概述:
- Java数据结构和算法:HashMap的实现原理
HashMap源码理解 Java集合之HashMap HashMap原理及实现学习总结 HashMap源码分析 HashMap原理及实现学习总结 1. HashMap概述 HashMap是基于哈希表的 ...
- esp8266接收到的数据如何存放到数组中_Java中HashMap的实现原理
最近面试中被问及Java中HashMap的原理,瞬间无言以对,因此痛定思痛觉得研究一番. 一.Java中的hashCode和equals 1.关于hashCode hashCode的存在主要是用于查找 ...
- Java HashMap的实现原理详解
HashMap是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashMap的实现原理做一下详细讲解. (Java1.8源码:http://docs.oracle.com/ja ...
- SpringMVC简要概述
SpringMVC简要概述 SpringMVC简要概述 SpringMVC简要概述 一.MVC 1.MVC简介 2.MVC三层架构分析 3.MVC框架使用机制 二.SpringMVC 1.Spring ...
- Java之HashMap系列--HashMap扩容的原理
原文网址:Java之HashMap系列--HashMap扩容的原理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的HashMap是如何扩容的. 重要大小 类 初始容量 最大容量 扩容 ...
- hashmap实现原理_Java中HashMap底层实现原理(JDK1.8)源码分析
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依 ...
最新文章
- python统计字母空格个数_python统计字母、空格、数字等字符个数的实例
- Python三十年技术演变史
- 编译报错一列----aclocal找不到
- django 创建APP 后找不到 templates文件夹下的Html文件
- 中国汽车行业节能减排行业全景调研规划及投资投资战略咨询研究报告2022-2028年版
- linux下su和sudo的区别 (/libtool: arm-linux-gcc command not found )
- js面向对象开发互联网机顶盒应用头端之二
- 460. LFU 缓存
- Linux操作系统监视NVIDIA的GPU使用情况
- 简单实现Popup弹出框添加数据
- 巴西教育科技公司Arco Educacao上市 融资1.95亿美元
- EMC创建出《星际旅行》全息甲板,并利用其模拟数据中心
- Android自定义view之ViewPager指示器——2
- Guitar Pro如何新建吉他谱步骤
- php根据身份证号码确定地区(省份)地址
- Exadata想要补装Oracle 11g的注意事项
- dllMain函数的作用
- nodejs 读取写入 plist 文件,使用 plist npm 包
- flask+python 实时视频流输出到前台
- 腾讯云老用户重新注册新账号算新用户吗?
热门文章
- java实现微信App支付
- 二 蓝牙系统架构 - 2.1 核心系统架构
- linux系统中pinctrl 和gpio子系统使用方法(教你点灯)
- java科目二踩线原理,右倒车入库总踩线?是因为没有看到这些“秘诀”
- win10网络图标变成地球加禁止符号但能上网解决办法
- 智能反射面(IRS)在无线通信安全领域应用的论文复现
- Jenkins系列之——第一章 Jenkins下载及安装
- Cmn组合数c语言,计算并输出组合数Cmn……不会打……要求递归……谢谢
- eigrp 扩散算法_EIGRP之DUAL(扩散更新算法)
- 基于3D关节点的人体动作识别综述(转)