教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang中map和slice的查询速度比较,结果意想不到

golang中map和slice的查询速度比较,结果意想不到

发布时间:2022-02-03   编辑:jiaochengji.com
教程集为您提供golang中map和slice的查询速度比较,结果意想不到等资源,欢迎您收藏本站,我们将为您提供最新的golang中map和slice的查询速度比较,结果意想不到资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

看到标题,第一反应,map肯定秒杀slice啊,我当时也是这么想的,毕竟前者的查询复杂度是O(1),后者是O(n)。


但是,事事难预料哦,用代码来说明问题:

先写两个测试函数

<pre class="prettyprint"><code class=" hljs go"> <span class="hljs-keyword">var</span> testTimeSlice=[]<span class="hljs-typename">string</span>{<span class="hljs-string">"aa"</span>,<span class="hljs-string">"bb"</span>,<span class="hljs-string">"cc"</span>,<span class="hljs-string">"dd"</span>,<span class="hljs-string">"ee"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"zz"</span>} <span class="hljs-keyword">var</span> testTimeMap = <span class="hljs-keyword">map</span>[<span class="hljs-typename">string</span>]<span class="hljs-typename">bool</span>{<span class="hljs-string">"aa"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"bb"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"cc"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"dd"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"ee"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"ff"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"zz"</span>: <span class="hljs-constant">true</span>} <span class="hljs-comment">//以上为第一组查询测试数据</span> <span class="hljs-keyword">var</span> testTimeSlice2=[] <span class="hljs-typename">string</span>{<span class="hljs-string">"aa"</span>,<span class="hljs-string">"bb"</span>,<span class="hljs-string">"cc"</span>,<span class="hljs-string">"dd"</span>,<span class="hljs-string">"ee"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"bb"</span>,<span class="hljs-string">"cc"</span>,<span class="hljs-string">"dd"</span>,<span class="hljs-string">"ee"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"bb"</span>,<span class="hljs-string">"cc"</span>,<span class="hljs-string">"dd"</span>,<span class="hljs-string">"ee"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"bb"</span>,<span class="hljs-string">"cc"</span>,<span class="hljs-string">"dd"</span>,<span class="hljs-string">"ee"</span>,<span class="hljs-string">"aa"</span>,<span class="hljs-string">"i"</span>,<span class="hljs-string">"j"</span>, <span class="hljs-string">"l"</span>, <span class="hljs-string">"m"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"o"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"q"</span>, <span class="hljs-string">"k"</span>, <span class="hljs-string">"x"</span>, <span class="hljs-string">"y"</span>, <span class="hljs-string">"z"</span>, <span class="hljs-string">"1"</span>, <span class="hljs-string">"2"</span>, <span class="hljs-string">"3"</span>, <span class="hljs-string">"4"</span>, <span class="hljs-string">"5"</span>, <span class="hljs-string">"6"</span>, <span class="hljs-string">"7"</span>, <span class="hljs-string">"8"</span>, <span class="hljs-string">"9"</span>, <span class="hljs-string">"10"</span>,<span class="hljs-string">"zz"</span>} <span class="hljs-keyword">var</span> testTimeMap2 = <span class="hljs-keyword">map</span>[<span class="hljs-typename">string</span>]<span class="hljs-typename">bool</span>{<span class="hljs-string">"aa"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"bb"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"cc"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"dd"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"ee"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"ff"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"qq"</span>: <span class="hljs-constant">true</span>,<span class="hljs-string">"ww"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"rr"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"tt"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"zz"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"uu"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"ii"</span>: <span class="hljs-constant">true</span>,<span class="hljs-string">"oo"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"pp"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"lk"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"kl"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"jk"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"kj"</span>: <span class="hljs-constant">true</span>,<span class="hljs-string">"hl"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"lh"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"fg"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"gfdd"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"df"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"fd"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"i"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"j"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"l"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"m"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"n"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"o"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"p"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"q"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"k"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"x"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"y"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"z"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"1"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"2"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"3"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"4"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"5"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"6"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"7"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"8"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"9"</span>: <span class="hljs-constant">true</span>, <span class="hljs-string">"10"</span>: <span class="hljs-constant">true</span>} <span class="hljs-comment">//以上为第二组查询测试数据</span> <span class="hljs-keyword">func</span> testSlice(a []<span class="hljs-typename">string</span>) { now:=time.Now() <span class="hljs-keyword">for</span> j:<span class="hljs-number">=0</span>; j <<span class="hljs-number"> 100000</span>; j { <span class="hljs-keyword">for</span> _,v:=<span class="hljs-keyword">range</span> a{ <span class="hljs-keyword">if</span> v==<span class="hljs-string">"zz"</span>{ <span class="hljs-keyword">break</span> } } } finish:=time.Since(now) fmt.Println(finish1) } <span class="hljs-keyword">func</span> testMap(a <span class="hljs-keyword">map</span>[<span class="hljs-typename">string</span>]<span class="hljs-typename">bool</span>) { now:=time.Now() <span class="hljs-keyword">for</span> j:<span class="hljs-number">=0</span>; j <<span class="hljs-number"> 100000</span>; j { <span class="hljs-keyword">if</span> _, ok := a[<span class="hljs-string">"zz"</span>]; ok { <span class="hljs-keyword">continue</span> } } finish2:=time.Since(now) fmt.Println(<span class="hljs-string">"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"</span>) fmt.Println(finish2) fmt.Println(<span class="hljs-string">"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"</span>) } </code></pre>



第一个函数接受一个slice,然后进行十万次查询,第二个函数接受一个map,进行十万次查询。

当用第一组测试数据时,结果如下:

<pre class="prettyprint"><code class=" hljs erlang-repl"><span class="hljs-number">1.0011</span>ms //<span class="hljs-variable">Slice</span>查询耗时 <span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span> <span class="hljs-number">6.0038</span>ms //<span class="hljs-variable">Map</span>查询耗时 <span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span></code></pre>



用第二组测试数据时,结果如下:

<pre class="prettyprint"><code class=" hljs erlang-repl"><span class="hljs-number">8.0038</span>ms //<span class="hljs-variable">Slice</span>查询耗时 <span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span> <span class="hljs-number">2.0019</span>ms //<span class="hljs-variable">Map</span>查询耗时 <span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span><span class="hljs-exclamation_mark">!</span> </code></pre>



现在可以得出结论了,当数据量小的时候,slice的查询速度是比map快的,为什么呢,因为golang的map底层是用hash实现的,既然有hash,那就要做映射,那就有hash函数,这个hash函数的开销千万不要忘记,不要一看到map就只记着O(1)


数据集小,直接遍历查找的开销肯定比hash的开销小。


当数据量上去了,map的优势自然而然就出来了。

到此这篇关于“golang中map和slice的查询速度比较,结果意想不到”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang从入门到放弃200618--Map(1)Map的初始化和基本操作
golang中map的一些注意事项
由浅入深聊聊Golang的map
golang map key 正则表达_Golang中的Map
Golang Slice
Golang map底层实现原理解析
Golang 中使用 Slice 索引 Map 替代 Map 获得性能提升
golang key map 所有_Golang面试知识点总结
深度解密Go语言之 map
Go基础编程:Map

[关闭]
~ ~