为什么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 ...
随机推荐
- oracle表中增加字段sql
declare v_Count1 int := 0; v_Count2 int := 0;begin select count(1) into v_Count1 from user_all_table ...
- 【LeetCode】 907 子数组的最小值之和
Decrisption Given an array of integers arr, find the sum of min(b), where b ranges over every (conti ...
- 关于js数组方法forEach()
1.forEach()是什么? forEach()是一种数组遍历方法. 在js最基础的遍历数组方法可能是这样的 点击查看代码 var myArr = [1, 2, 3] for(var i = 0; ...
- 杭电OJ刷题指南(ACM)
杭州电子科技大学Oj是著名的算法竞赛刷题网站!!
- 329MD5的加密
一.引用帮助类 二.登录的代码
- SelectionSort,选择排序,C++实现
1 // g++ selection_sort.cc -Wall -O3 -std=c++11 && ./a.exe 2 3 4 #include <iostream> 5 ...
- matlab 将某文件夹的内容复制到另一文件下
%% 清空close all;clear;clc; %% 选择文件路径(复制某文件夹下部分文件夹到其他路径)folder = uigetdir('C:\Desktop','请选择文件夹'); %% i ...
- python——numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. import numpy a = num ...
- 按list大小进行分组
package cn.tk.netcore.rest;import java.util.ArrayList;import java.util.Arrays;import java.util.List; ...
- c/s winForm框架 tabpage标签切换窗体
/// <summary> /// 根据窗体Name打开窗体 /// </summary> /// <param name="name">< ...