HashMap的数据结构

前提:主要数据结构:数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么我…

大家好,又见面了,我是你们的朋友全栈君。

前提:

主要数据结构:

数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。

数组

数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;

链表

链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

哈希表

那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。

  哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表的数组” ,如图:

二叉树:

   对一棵相对平衡的有序二叉树,对其进行插入,查找,删除等操作,平均复杂度均为O(logn)。

 

HashMap的数据结构:

HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的即哈希表和红黑树。

 

结构组成:

首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率

当链表数组的容量超过初始容量的0.75时,再散列将链表数组扩大2倍,把原链表数组的搬移到新的数组中

 

HashMap的数据结构

 

参考:

https://www.cnblogs.com/holyshengjie/p/6500463.html

https://blog.csdn.net/tuke_tuke/article/details/51588156

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126231.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm2021 激活码永久(最新序列号破解)

    pycharm2021 激活码永久(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    104
  • 【RPC Dubbo】dubbo负载均衡策略

    【RPC Dubbo】dubbo负载均衡策略文章目录前言参考前言在上一篇博客中,介绍了zookeeper作为dubbo的注册中心是如何工作的,有一个很重要的点,我们的程序是分布式应用,服务部署在几个节点(服务器)上,当消费者调用服务时,zk返回给dubbo的是一个节点列表,但是dubbo只会选择一台服务器,那么它究竟会选择哪一台呢?这就是dubbo的负载均衡策略了,本篇博客就来聚焦dubbo的负载均衡策略。参考dubbo负载均衡策略…

    2022年7月11日
    18
  • python psutil模块查找进程_python模块 – psutil「建议收藏」

    python psutil模块查找进程_python模块 – psutil「建议收藏」一、psutil模块:1.psutil模块简介他是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice…

    2022年5月4日
    43
  • glassfish配置错误问题「建议收藏」

    glassfish配置错误问题「建议收藏」当脱开netbeans单独运行glassfishweb服务器后:(运行glassfish服务器cmd下asadminstart-domain服务器就开始运行)浏览页面出现org.apache.jasper.JasperException:PWC6345:Thereisanerrorininvokingjavac.AfullJDK(notjustJ…

    2022年8月20日
    6
  • 使用PyCharm开发树莓派

    使用PyCharm开发树莓派目录安装并激活 PyCharm 通过 ssh 连接到树莓派 前提 树莓派具备联网功能 即可通过 SSH 连接到树莓派 为了便于开发 如果不是直接使用网线 推荐让树莓派去连接其他热点 比如手机热点 宿舍路由器等 这样是为了能让树莓派上网 方便后期一些包的安装 当连接手机热点时 需要知道树莓派被分配的 ip 查询方式可以看文章 如何查看连接到手机热点的树莓派 IP 地址 注意 PyCharm 社区版没有连接 ssh 的功能 确认 Windows 电脑和树莓派在同一个网络里 在你的 Windows 电脑上安装 PyC

    2025年10月22日
    5
  • HTTP协议

    HTTP协议

    2022年1月21日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号