Map

map中的key:无序,不可重复的 --》:key方法需要重写hashcode和equals方法

map中的value:无序,可重复的

一个键值对构成一个entry对象,entry对象无序不可重复

HashMap

hashmap底层的数据结构:

jdk7及之前:数组+链表

jdk8及之后:数组+链表+红黑树

JDK7为例:

实例化以后底层创建了长度为16的一维数组Entry[] table;

map.put(k1,v1);

首先,调用k1所在类的hashcode()计算k1的哈希值,此哈希值通过算法计算以后得到entry()数组所在的存放位置

如果计算得到的这个位置为空,此时的k-v(entry)直接添加成功 ----------情况一

如果此位置上的数据不为空,意味这此位置上存在着一个或多个数据(以链表形式存在),比较k1和已经存在的一个或者多个数据的哈希值

如果k1的哈希值与已经存在的数据hash值都不相同,此时k1-v1添加成功 -------情况二

如果k1的哈希值和已经存在的某个哈希值相同,调用k1所在类的equals方法,比较:

如果equals返回false,则k1-v1添加成功 ---------情况三

如果equals方法返回true,则说明key值相等,使用v1替换相同key的value值

补充:关于情况二和情况三:此时的k1-v1和原来的数据以链表的方式存储

扩容:在不断的添加过程中,会涉及到扩容问题,默认的扩容方式扩容为原来的2倍,并将原有的数据复制过来

JDK8相较JDK7不同:

1.new hashmap():底层没有马上创建长度为16的数组

2.jdk8底层的数组类型是Node类型(其实元素类型一样,名字不一样)

3.首次调用put方法时,底层才创建长度为16的数组(参考Arraylist,一样的处理方式)

4.jdk底层结构只有数组+链表,jdk8底层数据结构有数组+链表+红黑树

当数组的某一个索引位置上的元素以链表形式存在的数据个数>8且当前数组的长度>64时,此时此索引位置上的所有数据改为用红黑树存储(链表--》红黑树,红黑树查找效率高)

java集合听课笔记之hashMap的底层数据结构相关推荐

  1. Java集合框架之三:HashMap源码解析

    Java集合框架之三:HashMap源码解析 版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! HashMap在我们的工作中应用的非常广泛,在工作面试中也经常会被问到,对于这样一个重要的集 ...

  2. Java 集合学习笔记:Collection

    Java 集合学习笔记:Collection UML 简介 方法和说明 JDK8 新增 `default` 方法 AbstractCollection isEmpty contains(Object ...

  3. 【Java集合学习系列】HashMap实现原理及源码分析

    HashMap特性 hashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap接口,实现了Map接口(HashTable跟HashMap很像,HashTable中的方法是线程安全 ...

  4. 深入Java集合学习系列:HashMap的实现原理

    2019独角兽企业重金招聘Python工程师标准>>> HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和 ...

  5. Java集合框架笔记记录 --- 原创@余胜军 但有个人心得

    Java集合框架课程安排 1.集合框架API知识 List/Set/Map集合 2.常见数据结构 数组/链表/队列/树 3.集合源码解读 List/Set/Map1.为什么需要学习Java中集合框架呢 ...

  6. Java 集合系列10: HashMap深入解析(2)

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 QQ群:766946816 概述 这接着上一篇的文章的内容. 第3.1部 ...

  7. Java 集合系列10: HashMap深入解析(1)

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 QQ群:766946816 概要 这一章,我们对HashMap进行学习. ...

  8. JAVA集合(笔记)

    集合简介 概念:对象的容器,定义了对多个对象进项操作的的常用方法.可实现数组的功能. 和数组的区别: 数组长度固定,集合长度不固定. 数组可以存储基本类型和引用类型,集合只能存储引用类型. 位置: j ...

  9. Java集合- HashMap 的底层数据结构实现原理

    一.HashMap 的数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列. HashMap 通过 key 的 hashCode 经过扰 ...

最新文章

  1. 【干货】超全!华为交换机端口vlan详解~
  2. Qt 多线程的简单演示
  3. eclipse开发android的好处,从Eclipse切换到IntelliJ IDEA for Android开发的好处
  4. linux搭建mq环境,Linux搭建servicemix、activemq环境
  5. excel公式:用countif、match、index合并同类项
  6. Hadoop生态圈-Hbase的API常见操作
  7. LAMP架构调优(六)——开启长链接
  8. 阅读科研文献心得分享(二)
  9. k8s初始化报错[kubelet-check] Initial timeout of 40s passed.
  10. android系统方法裁剪图片 华为手机显示为圆
  11. 【艾特淘】淘宝全新店铺怎么运营?从哪些方面下手?
  12. 电子签章,一章通用还有多远?
  13. Anchor-based和Anchor-free优缺点对比
  14. 计算机创建只读用户,如何把电脑的文件夹在局域网共享成只读,别人不能删除和修改?...
  15. 自学Java最起码要学到什么程度才能出去找工作?
  16. 对象引用、可变性和垃圾回收
  17. 《资讯:元宇宙》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+区块链+NFT+绿洲+头号玩家+平行宇宙+虚拟世界+Pico+Oculus+Soul+立钻哥哥++==)
  18. RPMsg:协议简介
  19. G.711 G.722 codec 搞定
  20. 解决页面中引用了谷歌字体库访问缓慢的问题

热门文章

  1. 深度学习笔记(三)—— 反向传播[Back Propagation] 计算图[Computational Graph]
  2. python奥运会_用python分析kaggle_奥运会数据的案例
  3. JSP的九大内置对象和四个作用域
  4. mongodb聚合联系题目及参考答案
  5. python 知乎 合并 pdf_实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件...
  6. 使用CloudFormation将Docker容器自动部署到AWS
  7. js 数组的every() 方法
  8. libreoffice 出现 /lib/x86_64-linux-gnu/libcairo.so.2: undefined symbol: FT_Get_Var_Design_Coordi
  9. 网站遭到恶意攻击有什么危害
  10. xp安装java_在WindowsXP中,如何安装JAVA软件?