为什么HashMap查找比List快很多?
做两数之和这道题目时,引发了一个思考:


为什么两者运行时间相差如此之大???好残忍,我List比你HashMap到底差在哪****
于是我一顿查资料....
战犯哈希算法登场
哈希算法会根据你要存入的数据,先通过该算法,计算出一个地址值,这个地址值就是你需要存入到集合当中的数据的位置,而不会像数组那样一个个的进行挨个存储,挨个遍历一遍后面有空位就存这种情况了,而你查找的时候,也是根据这个哈希算法来的,将你的要查找的数据进行计算,得出一个地址,这个地址会印射到集合当中的位置,这样就能够直接到这个位置上去找了,而不需要像数组那样,一个个遍历,一个个对比去寻找,这样自然增加了速度,提高了效率了.
HashMap 在查找时的时间复杂度是 O(1),而 List 的查找时间复杂度是 O(n)。
HashMap 内部通过将 key 值通过哈希函数映射到数组索引位置,这样就能够在数组中快速找到对应的 value。即使在极端情况下,哈希冲突也能够通过链表或红黑树等数据结构来处理。因此,无论 HashMap 中有多少元素,查找所需的时间基本保持不变,即 O(1)。
而 List 是一个线性结构,要查找某个元素,需要从头开始遍历,直到找到目标元素或者遍历到列表的末尾。在列表中查找一个元素的时间复杂度与列表长度成正比,即 O(n)。
因此,当需要频繁地进行查找操作时,使用 HashMap 可以比使用 List 更快。但是,HashMap 也有自己的局限性,例如对内存的消耗较大,在进行大量插入操作时,可能需要调整 HashMap 的容量以保证性能。
为什么HashMap查找比List快很多?的更多相关文章
- mlocate比find快很多的查找命令
mlocate比find快很多的查找命令 使用linux操作系统的人,一般都用过文件查找命令find,在文件数量非常庞大的时候,比如在高通的android工程项目中,目录大小有十几个G,文件数量非常多 ...
- QMap QHash的选择(QString这种复杂的比较,哈希算法比map快很多)
QMap QHash有近乎相同的功能.很多资料里面介绍过他们之间的区别了.但是都没有说明在使用中如何选择他们. 实际上他们除了存储顺序的差别外,只有key操作的区别. 哈希算法是将包含较多信息的“ke ...
- select * 比select column快很多奇怪案例分析
遇到MYSQL傻傻的地方,下面给个案例,大家感受下: 注意以下两个sql只有select *和select g.id区别. SQL1:SELECT g.idFROM table1 gINNER JOI ...
- php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)
php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解) 一.总结 $cur=$cur->next;这句话需要好好理解 指$cu ...
- 技术随笔 查找速度最快的Google IP
转:http://www.xiumu.org/technology/the-find-the-fastest-in-the-google-ip.shtml 体验秒开GOOGLE的感觉! 在http:/ ...
- jvm minor gc 为什么比 full gc 快很多
1.minor gc 也需要STW,只不过正常情况下 minor gc STW时间非常短,所以很多人误以为没有STW. 这里的正常情况是,Eden 区产生的新对象大部分被回收了,不需要拷贝. 2.M ...
- [C#进阶系列]专题二:你知道Dictionary查找速度为什么快吗?
一.前言 在之前有一次面试中,被问到你了解Dictionary的内部实现机制吗?当时只是简单的了问答了:Dictionary的内部结构是哈希表,从而可以快速进行查找.但是对于更深一步了解就不清楚了.所 ...
- sql中能使用charindex 不要用 in 。charindex比in快很多
写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEINDX的函数,顾名思义就 ...
- cin 和scanf,scanf比cin快很多
//#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...
- tensorflow pip install 安装指定版本的包并指定安装源(速度会快很多)
pip install tensorflow-gpu==1.3 pip install tensorflow-gpu==1.4 # pip install 命令行pip install -i http ...
随机推荐
- 通过cmd对数据库SQL进行创建表空间并创建用户
通过cmd对数据库SQL进行创建表空间并创建用户 1.创建表空间:create tablespace stx(名字) datafile ' 目录路径\stx(名字).dbf ' size 64m; 2 ...
- C语言博客作业07
1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪里 https://edu.cnblogs.com/cam ...
- 解决element-ui表格多重嵌套循环时,添加row-key="id" 出现Duplicate keys detected: 'XXX' 错误的问题
Duplicate keys detected: 'XXX' 错误,怀疑是多重嵌套循环时 :key="item.id或index" 不能重复的问题,但设置了不同的 key 后并未解 ...
- ps2022(Photoshop 2022)Mac/win最新图像处理中文版
Adobe Photoshop 2022 Mac/win是数字图像处理和编辑的行业标准,提供了全面的专业修饰工具包,并具有旨在激发灵感的强大编辑功能.Photoshop 带有大量图像处理工具,旨在帮助 ...
- eclipse project is missing required java project
eclipse project is missing required java project eclipse版本: 2022-03 这情况就是maven包出了问题 具体的说不上 看我的解决方法: ...
- Hive 操作与应用 词频统计
一.hive用本地文件进行词频统计 1.准备本地txt文件 2.启动hadoop,启动hive 3.创建数据库,创建文本表 4.映射本地文件的数据到文本表中 5.hql语句进行词频统计交将结果保存到结 ...
- database.properties基本配置
database.properties基本配置 jdbc.driver=com.mysql.jdbc.Driver # jdbc.url=jdbc:mysql://localhost:3306/ssm ...
- [C#]索引指示器
参考代码: using System; namespace IndexerDemo { class StuInfo { public string Name; public string[] CouN ...
- 转载:VMware Esxi开通SSH功能
转载:https://www.cnblogs.com/dsl146/p/13739953.html ESXi 5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统.平时可以通过VM ...
- 安装Win11需要网络才能下一步怎么跳过
1.先Shift+F10打开命令提示符 2.运行C:\Windows\System32\oobe\BypassNRO.cmd 3.自动重启来到联网这一步,多了一个没有网络的选项,进入.