博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang map和for循环的查找效率对比
阅读量:4616 次
发布时间:2019-06-09

本文共 1184 字,大约阅读时间需要 3 分钟。

测试代码:

package mainimport (	"encoding/json"	"fmt"	"math/rand"	"strconv"	"testing"	"time")func TestMap(t *testing.T) {	num := 100	testdata := initTestData(num)	random := rand.New(rand.NewSource(time.Now().UnixNano()))	searchs := make([]int, num)	for i := 0; i < num; i++ {		searchs[i] = int(random.Int31n(int32(num)))	}	find := true	t.Log(find)	start := time.Now()	hash := make(map[int]*TestStruct, num)	for i := 0; i < num; i++ {		hash[testdata[i].Id] = testdata[i]	}	for _, item := range searchs {		_, has := hash[item]		find = has	}	end := time.Now()	t.Log("cost:", end.UnixNano()-start.UnixNano())	start = time.Now()	for _, item := range searchs {		for _, data := range testdata {			if item == data.Id {				find = true				break			}		}	}	end = time.Now()	t.Log("cost:", end.UnixNano()-start.UnixNano())}type TestStruct struct {	Id int	No string}func initTestData(num int) []*TestStruct {	result := make([]*TestStruct, num)	for i := 0; i < num; i++ {		result[i] = &TestStruct{			Id: i + 1,			No: strconv.Itoa(i + 1),		}	}	return result}

  运行测试用例发现数据集比较小的情况下,两种简单的搜索方式基本上没有什么区别,当数据量过大(>1000)时,使用hash进行索引,速度会快很多 (hash和排序后进行快速搜索的效率差不多)

转载于:https://www.cnblogs.com/zp900704/p/6385650.html

你可能感兴趣的文章
数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
查看>>
生产环境下正则的应用实例(一)
查看>>
在CentOS7命令行模式下安装虚拟机
查看>>
Arduino可穿戴开发入门教程Arduino开发环境介绍
查看>>
Windows平台flex+gcc词法分析实验工具包
查看>>
3.Python基础 序列sequence
查看>>
Chapter 4 Syntax Analysis
查看>>
vi/vim使用
查看>>
讨论Spring整合Mybatis时一级缓存失效得问题
查看>>
Maven私服配置Setting和Pom文件
查看>>
Linux搭建Nexus3.X构建maven私服
查看>>
Notepad++使用NppFTP插件编辑linux上的文件
查看>>
NPOI 操作Excel
查看>>
MySql【Error笔记】
查看>>
vue入门
查看>>
JS线程Web worker
查看>>
Flex的动画效果与变换!(三)(完)
查看>>
mysql常见错误码
查看>>
Openresty 与 Tengine
查看>>
使用XV-11激光雷达做hector_slam
查看>>