教程集为您提供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的优势自然而然就出来了。
<blockquote class="layui-elem-quote" style="width: 100%;overflow:hidden">
作者: jeffrey11223
链接: https://blog.csdn.net/jeffrey11223/article/details/78450938
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
</blockquote>
到此这篇关于“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