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基本原理相关推荐

  1. HashMap及ConcurrentHashMap基本原理概述

    0.前言 本博文部分文字及图片参考自以下三篇文章,其余内容为本人经过思考及总结后所写,仅作为学习分享使用,如有侵权,请联系本人删除,谢谢. 1.什么是HashMap 2.高并发下的HashMap 3. ...

  2. java基础相关知识

    1.JAVA中的单例模式 单例设计模式所解决的问题就是:保证类的对象在内存中唯一. 单例模式分为:懒汉式单例.饿汉式单例.登记式单例三种. 1)饿汉式单例类.在类初始化时,已经自行实例化 2)懒汉式单 ...

  3. Android 面经:我是如何进入大厂腾讯的?

    本文由 koller 授权投稿https://juejin.im/post/5d67e134e51d4562043f5746 由于众所周知的原因,移动端由于多年的发展,现如今面试要求变得越来越高,作为 ...

  4. Java API(十五):Queue队列、Deque栈、Map集合

    文章目录 Java API 一.Queue队列 1.Queue接口及LinkedList实现 2.Queue常用方法 二.Deque栈 1.Deque接口及LinkedList实现 2.Deque常用 ...

  5. 我的Android面试;OPPO外包+百度,flutter登录过期

    接下来就说说各家的面试题,希望打算年初跳槽去这些公司的朋友有个参考方向(自己去亲身实践才是王道).一共面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业 ...

  6. 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中

    最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...

  7. 第六章 Java数据结构和算法 之 容器类(一)

    文章目录 一.常见集合类概述 (1)Collection 集合接口 1.List子接口 (1)ArrayList 数组 (2)LinkedList 链表 (2.1)ArrayList与LinkedLi ...

  8. 盘点 HashMap 源码中的那些优雅的设计!

    以下文章来源方志朋的博客,回复"666"获面试宝典 一.HashMap构造器 HashMap总共给我们提供了三个构造器来创建HashMap对象. 1.无参构造函数public Ha ...

  9. 两个高频设计类面试题:如何设计HashMap和线程池

    你好,我是 yes. 最近在汇总面试题,但是我写的这个版本不是背诵版,不是那种死记硬背刻板的答案. 我的本意是抛砖引玉,针对每个题目给出我自己的理解和解释型的答案,然后背诵版本需要你们自行去总结和记忆 ...

  10. 源码之HashMap

    前言 HashMap是Map的一种实现,它存放的形式是以key-value形式存放的.但是底层HashMap这种数据结构是怎么实现的呢?是以什么数据结构实现的存储呢?这篇文章也是我自己对这些问题的一个 ...

最新文章

  1. pandas中的基本功能
  2. python3 字符串格式化
  3. websocket receive方法内 有循环怎么退出_认识HTML5的WebSocket
  4. python中向量长度_python中向量指的是什么意思
  5. 黑苹果关机重启后蓝牙连接不上_手机要关机吗,要贴膜吗,要套壳吗?看完这条,都有答案了_政务_澎湃新闻...
  6. 张朝阳寄语“校花”把参赛比做登山 走到不同阶段都是一种成就
  7. 含有swap的c语言冒泡排序6,c#中写个Swap方法来实现冒泡排序 看看哪里错了
  8. pytorch torch.nn.Module
  9. 当.NET遇到SYBASE
  10. 关于Myeclipse10的激活
  11. AndroidUI的基本结构
  12. log4j日志输出配置
  13. 各种杀毒软件序列号注册码大全
  14. eXosip事件总结
  15. 云计算就业方向有哪些 未来的发展前景怎么样
  16. SpringBoot使用LibreOffice--office转pdf
  17. 13.7.7.42 SHOW WARNINGS 语句
  18. 自建kafka和公有云kafka对比
  19. winscp中解压文件
  20. 杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

热门文章

  1. Atitit. 解决unterminated string literal 缺失引号
  2. 世界前列量化高频投资公司
  3. 创投观察 | 市场白热化前,RPA公司要怎么构建核心壁垒?
  4. 美丽的回测 —— 教你定量计算过拟合概率
  5. 股市法则:长线大钱最终胜出(荀玉根、姚佩)
  6. (转)《精通比特币》原码分析: rpc_block
  7. (转)财富取决于极少的大高潮,幸福取决于较多的小高潮
  8. Julia:last() 和first()
  9. io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK
  10. 毕设题目:Matlab表盘识别