HashMap基本原理
2019独角兽企业重金招聘Python工程师标准>>>
1、首先说一下数组结构,数组的存储区间是连续的,空间的复杂度比较大,所以会比较占用内存。
但寻址比较快,所以特点是:查询快速、操作困难。
2、再说一下链表结构,链表存储结构比较离散,空间的复杂度比较小,所以内存占用比较宽松。
但寻址比较麻烦,所以特点是:查询较慢、操作简单。
这两种存储结构是比较典型的两个极端,这时哈希表可以同时弥补他们的缺点。我们可以理解哈希表为:
把链表存储到数组中(数组+链表)
不爱画了,盗用一张网上的图片,哈哈 :
HashMap里面实现了一个静态内部类Entry,属性有 key , value和next, 哈希表每个元素存储的是链表的头结点。这些元素存储到数组中的规则一般是通过 hash(key)%len(元素的key的哈希值对数组长度取模) 定位。比如此哈希表中,10%12=10, 23%12=10。所以10和23都存储在数组下标为10的位置。
对第一个键值对A的存储,通过计算key的hash得到index=10,所以Entry[10] = A。对第二个键值对B的存储,通过计算B的index也等于10。HashMap操作是:B.next = A,Entry[10] = B。以此类推,这样我们会看到index=10的地方其实存取了A、B两个键值对,他们通过next链接在一起。也就是说数组中存储的是最后插入的元素,这就是HashMap的大致实现。
转载于:https://my.oschina.net/MinghanSui/blog/1506058
HashMap基本原理相关推荐
- HashMap及ConcurrentHashMap基本原理概述
0.前言 本博文部分文字及图片参考自以下三篇文章,其余内容为本人经过思考及总结后所写,仅作为学习分享使用,如有侵权,请联系本人删除,谢谢. 1.什么是HashMap 2.高并发下的HashMap 3. ...
- java基础相关知识
1.JAVA中的单例模式 单例设计模式所解决的问题就是:保证类的对象在内存中唯一. 单例模式分为:懒汉式单例.饿汉式单例.登记式单例三种. 1)饿汉式单例类.在类初始化时,已经自行实例化 2)懒汉式单 ...
- Android 面经:我是如何进入大厂腾讯的?
本文由 koller 授权投稿https://juejin.im/post/5d67e134e51d4562043f5746 由于众所周知的原因,移动端由于多年的发展,现如今面试要求变得越来越高,作为 ...
- Java API(十五):Queue队列、Deque栈、Map集合
文章目录 Java API 一.Queue队列 1.Queue接口及LinkedList实现 2.Queue常用方法 二.Deque栈 1.Deque接口及LinkedList实现 2.Deque常用 ...
- 我的Android面试;OPPO外包+百度,flutter登录过期
接下来就说说各家的面试题,希望打算年初跳槽去这些公司的朋友有个参考方向(自己去亲身实践才是王道).一共面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业 ...
- 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中
最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...
- 第六章 Java数据结构和算法 之 容器类(一)
文章目录 一.常见集合类概述 (1)Collection 集合接口 1.List子接口 (1)ArrayList 数组 (2)LinkedList 链表 (2.1)ArrayList与LinkedLi ...
- 盘点 HashMap 源码中的那些优雅的设计!
以下文章来源方志朋的博客,回复"666"获面试宝典 一.HashMap构造器 HashMap总共给我们提供了三个构造器来创建HashMap对象. 1.无参构造函数public Ha ...
- 两个高频设计类面试题:如何设计HashMap和线程池
你好,我是 yes. 最近在汇总面试题,但是我写的这个版本不是背诵版,不是那种死记硬背刻板的答案. 我的本意是抛砖引玉,针对每个题目给出我自己的理解和解释型的答案,然后背诵版本需要你们自行去总结和记忆 ...
- 源码之HashMap
前言 HashMap是Map的一种实现,它存放的形式是以key-value形式存放的.但是底层HashMap这种数据结构是怎么实现的呢?是以什么数据结构实现的存储呢?这篇文章也是我自己对这些问题的一个 ...
最新文章
- pandas中的基本功能
- python3 字符串格式化
- websocket receive方法内 有循环怎么退出_认识HTML5的WebSocket
- python中向量长度_python中向量指的是什么意思
- 黑苹果关机重启后蓝牙连接不上_手机要关机吗,要贴膜吗,要套壳吗?看完这条,都有答案了_政务_澎湃新闻...
- 张朝阳寄语“校花”把参赛比做登山 走到不同阶段都是一种成就
- 含有swap的c语言冒泡排序6,c#中写个Swap方法来实现冒泡排序 看看哪里错了
- pytorch torch.nn.Module
- 当.NET遇到SYBASE
- 关于Myeclipse10的激活
- AndroidUI的基本结构
- log4j日志输出配置
- 各种杀毒软件序列号注册码大全
- eXosip事件总结
- 云计算就业方向有哪些 未来的发展前景怎么样
- SpringBoot使用LibreOffice--office转pdf
- 13.7.7.42 SHOW WARNINGS 语句
- 自建kafka和公有云kafka对比
- winscp中解压文件
- 杨校老师课堂之Spring框架面试题【开发工程师面试前必看】
热门文章
- Atitit. 解决unterminated string literal 缺失引号
- 世界前列量化高频投资公司
- 创投观察 | 市场白热化前,RPA公司要怎么构建核心壁垒?
- 美丽的回测 —— 教你定量计算过拟合概率
- 股市法则:长线大钱最终胜出(荀玉根、姚佩)
- (转)《精通比特币》原码分析: rpc_block
- (转)财富取决于极少的大高潮,幸福取决于较多的小高潮
- Julia:last() 和first()
- io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK
- 毕设题目:Matlab表盘识别