golang 中map 和slice 索引速度比较
主文件
package main
var max = 100
var Slice = make([]int, max 10)
var Map = make(map[int]int)
func init() {
for i := 0; i < max; i {
Slice[i] = i
Map[i] = i
}
}
// 查找算法可以优化,本文对于常用无序查找做比较
func SearchSlice(i int) int {
for _, v := range Slice {
if v == i {
return v
}
}
return -1
}
func SearchMap(i int) int {
return Map[i]
}
测试文件
package main
import "testing"
func BenchmarkSearchMap(b *testing.B) {
for i := 0; i < b.N; i {
_ = SearchMap(i % max)
}
}
func BenchmarkSearchSlice(b *testing.B) {
for i := 0; i < b.N; i {
_ = SearchSlice(i % max)
}
}
func BenchmarkSlice(b *testing.B) {
for i := 0; i < b.N; i {
_ = Slice[i%max]
}
}
测试结果
max = 100
BenchmarkSearchMap-16 94148293 12.7 ns/op 0 B/op 0 allocs/op
BenchmarkSearchSlice-16 49473447 23.6 ns/op 0 B/op 0 allocs/op
BenchmarkSlice-16 187461336 6.46 ns/op 0 B/op 0 allocs/op
max = 10000
BenchmarkSearchMap-16 43147364 27.6 ns/op 0 B/op 0 allocs/op
BenchmarkSearchSlice-16 968623 1159 ns/op 0 B/op 0 allocs/op
BenchmarkSlice-16 187649472 6.42 ns/op 0 B/op 0 allocs/op
Max = 1000000
BenchmarkSearchMap-16 15015690 90.1 ns/op 0 B/op 0 allocs/op
BenchmarkSearchSlice-16 441436 104242 ns/op 0 B/op 0 allocs/op
BenchmarkSlice-16 182620702 6.58 ns/op 0 B/op 0 allocs/op
在一些特定优化条件下,可以尝试用slice,效果会比map好,比如把10 6级的查找优化成3级102查找, 对于一些结构体,可以根据某些特征分类或预先根据特征值排序
到此这篇关于“golang 中map 和slice 索引速度比较”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
Golang 中使用 Slice 索引 Map 替代 Map 获得性能提升
golang map key 正则表达_Golang中的Map
golang中map的一些注意事项
Golang从入门到放弃200618--Map(1)Map的初始化和基本操作
Go基础编程:Map
golang map和for循环的查找效率对比
Golang map底层实现原理解析
golang 中map 和slice 索引速度比较
golang map 初始化 和 使用
golang:map