教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang 中map 和slice 索引速度比较

golang 中map 和slice 索引速度比较

发布时间:2021-05-26   编辑:jiaochengji.com
教程集为您提供golang 中map 和slice 索引速度比较等资源,欢迎您收藏本站,我们将为您提供最新的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

[关闭]
~ ~