为什么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 ...
随机推荐
- Templates && Algorithms
-[]基础算法 -[]递推和递归 -[]排序算法 -[]高精度,压位 -[]分治 -[]二分 -[]三分 -[]搜索算法 -[]简单搜索 -[]哈希和状态保存 -[]双向bfs -[]启发式搜索和DS ...
- Error running 'tm8': Cannot load C:\Users\Administrator\.IntelliJIdea2019.3\system\tomcat\Unnamed_jymes_3\conf\server.xml (系统找不到指定的文件。)
救命救命,由于脑壳被门夹了去更改了idea的配置,导致重启项目报错!又是给自己挖坑的一天,唉!!! 主要是看报错信息还一直以为是tomcat的问题,然后试了很多方法,比如查看配置的tomcat路径.重 ...
- 20220712 第一小组 张明旭 JS学习记录
心情 今天是正式学习的第四天,感觉上午任务不是特别重,身心放松,知识点都掌握的不错:一到下午刚上课就画风突变,内容突然就男了,后来依旧是男上加男... 重点: 四大循环(理解) 内置函数(了解) 在s ...
- DER编码
1. Attribute Type编码 对于标识串,采用低标识编码方式,只需1个字节.OBJECT IDENTIFIER的 tag为Ox06;class选择universal,则位8和位7为0,O ...
- list与linkedlist(添加、删除元素)
1)jdk1.8中list遍历过程中可以直接删除元素了(jdk1.7可以通过倒序遍历删除或iterator遍历删除元素) List<Integer> list = new ArrayLis ...
- c++学习9 结构体
一 结构体赋值 结构体赋值的方法有三种,逐个成员赋值,整体赋值和拷贝赋值. 设一个结构体有struck student{ int age;char ch[32]; }: 逐个成员赋值:student ...
- 解决LayUI中的 laydate 点击一闪而过问题
加一个:trigger: 'click' <input name="apbegin" id="apbegin" class="layui-inp ...
- idea设置svn忽略文件
第一步: 第二步: 第三步:
- 会话保持 Session和cookie
Session是什么? Session在网络中称为会话控制,是服务器为了保护用户状态而创建的一个特殊的对象,简而言之,session就是一个对象,用于存储信息. Session有什么用? sessio ...
- P1296 奶牛的耳语
P1296 奶牛的耳语 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题核心思路: 1.读入后要排序以达到剪枝的目的 2.模拟,遇到不能再交流就转入下一头牛,否则计数器加一 3. ...