做两数之和这道题目时,引发了一个思考:



为什么两者运行时间相差如此之大???好残忍,我List比你HashMap到底差在哪****

于是我一顿查资料....

战犯哈希算法登场

哈希算法会根据你要存入的数据,先通过该算法,计算出一个地址值,这个地址值就是你需要存入到集合当中的数据的位置,而不会像数组那样一个个的进行挨个存储,挨个遍历一遍后面有空位就存这种情况了,而你查找的时候,也是根据这个哈希算法来的,将你的要查找的数据进行计算,得出一个地址,这个地址会印射到集合当中的位置,这样就能够直接到这个位置上去找了,而不需要像数组那样,一个个遍历,一个个对比去寻找,这样自然增加了速度,提高了效率了.

HashMap 在查找时的时间复杂度是 O(1),而 List 的查找时间复杂度是 O(n)。

HashMap 内部通过将 key 值通过哈希函数映射到数组索引位置,这样就能够在数组中快速找到对应的 value。即使在极端情况下,哈希冲突也能够通过链表或红黑树等数据结构来处理。因此,无论 HashMap 中有多少元素,查找所需的时间基本保持不变,即 O(1)。

而 List 是一个线性结构,要查找某个元素,需要从头开始遍历,直到找到目标元素或者遍历到列表的末尾。在列表中查找一个元素的时间复杂度与列表长度成正比,即 O(n)。

因此,当需要频繁地进行查找操作时,使用 HashMap 可以比使用 List 更快。但是,HashMap 也有自己的局限性,例如对内存的消耗较大,在进行大量插入操作时,可能需要调整 HashMap 的容量以保证性能。

为什么HashMap查找比List快很多?的更多相关文章

  1. mlocate比find快很多的查找命令

    mlocate比find快很多的查找命令 使用linux操作系统的人,一般都用过文件查找命令find,在文件数量非常庞大的时候,比如在高通的android工程项目中,目录大小有十几个G,文件数量非常多 ...

  2. QMap QHash的选择(QString这种复杂的比较,哈希算法比map快很多)

    QMap QHash有近乎相同的功能.很多资料里面介绍过他们之间的区别了.但是都没有说明在使用中如何选择他们. 实际上他们除了存储顺序的差别外,只有key操作的区别. 哈希算法是将包含较多信息的“ke ...

  3. select * 比select column快很多奇怪案例分析

    遇到MYSQL傻傻的地方,下面给个案例,大家感受下: 注意以下两个sql只有select *和select g.id区别. SQL1:SELECT g.idFROM table1 gINNER JOI ...

  4. php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)

    php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解) 一.总结 $cur=$cur->next;这句话需要好好理解 指$cu ...

  5. 技术随笔 查找速度最快的Google IP

    转:http://www.xiumu.org/technology/the-find-the-fastest-in-the-google-ip.shtml 体验秒开GOOGLE的感觉! 在http:/ ...

  6. jvm minor gc 为什么比 full gc 快很多

    1.minor gc 也需要STW,只不过正常情况下 minor gc  STW时间非常短,所以很多人误以为没有STW. 这里的正常情况是,Eden 区产生的新对象大部分被回收了,不需要拷贝. 2.M ...

  7. [C#进阶系列]专题二:你知道Dictionary查找速度为什么快吗?

    一.前言 在之前有一次面试中,被问到你了解Dictionary的内部实现机制吗?当时只是简单的了问答了:Dictionary的内部结构是哈希表,从而可以快速进行查找.但是对于更深一步了解就不清楚了.所 ...

  8. sql中能使用charindex 不要用 in 。charindex比in快很多

    写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEINDX的函数,顾名思义就 ...

  9. cin 和scanf,scanf比cin快很多

    //#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...

  10. tensorflow pip install 安装指定版本的包并指定安装源(速度会快很多)

    pip install tensorflow-gpu==1.3 pip install tensorflow-gpu==1.4 # pip install 命令行pip install -i http ...

随机推荐

  1. ZSTUOJ刷题⑨:Problem H.--尖兵

    Problem H: 尖兵 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4691  Solved: 2112 Description 星光人已经出发了 ...

  2. 比较有趣的C语言小程序

    1.判断是否是闰年: #include <stdio.h> int main(void) {     int year, a;     printf("Please enter  ...

  3. libev中的__attribute__优化

    在学习libev的过程中,遇到了大量的__attribute__优化方式,此文章将它们做一个汇总和介绍,并会持续更新 1.unused:使编译器忽略未使用的函数或者变量 源码如下 1 //判断如果gc ...

  4. Get Keys In Binary Tree Layer By Layer

    Get the list of list of keys in a given binary tree layer by layer. Each layer is represented by a l ...

  5. STM32cubemx-HAL库串口断线问题

    STM32cubemx:version5.1 Chip: STM32F446RE IDE:Keil5 Q:小项目上写了个简单的通信包,波特率230400,数据量较大1600Byte/s,DMA的方式实 ...

  6. vue后台管理系统——项目优化上线

    1. 项目优化 项目优化策略: 使用进度条nprogress 生成打包报告 第三方库启用 CDN Element-UI 组件按需加载 路由懒加载 首页内容定制 ① 使用进度条nprogress 在页面 ...

  7. python Elementtree 生成带缩进格式的xml文件

    示例 之前拿ET写xml,直接对root节点调用write函数,会出现产生的xml字符串没有缩进,是干巴巴的一行,可读性比较差,就像下面这样: <annotation><filena ...

  8. 微信小程序基本总结

    小程序目录结构 project.config.json 配置项目文件,用的最多的就是配置是否开启HTTPS校检 app.js 设置一些全局的基础数据 app.json 设置底部tabbar,标题栏和路 ...

  9. 导入ssm项目时,项目基本的配置文件

    一.ssm框架基本的配置文件 上面的这些配置文件对于比较简单的ssm项目其实大同小异,逻辑上是差不多的. 在config目录下 在lib下就是各种jar包 二.导入ssm项目后,本地环境配置和项目本身 ...

  10. 第四天 while 嵌套循环语句

    python全栈开发笔记第四天 while 嵌套循环语句 while 条件 while 条件 print() print() 例题:num1 =int(input("num1:") ...