golang map和for循环的查找效率对比

测试代码:

package main

import (
	"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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值