Go数据结构与算法-数组


title: Go数据结构与算法-数组
tags: go,算法


介绍

算法是基于复合数据的之上的,只有当数据超过2个及以上的时候,我们才考虑它们的排序、查询等问题。我们首先要了解下go语言中两种复合数据类型:

  • 数组(Array)
  • 切片(Slice)

数组跟切片都是指向同一类型数据的集合,如int、string、float等数据类型。数组中包含的每个数据被称为数组元素,一个数组包含的元素个数称为数组的长度。
数据和切片是有区别的,数组是定长的,声明的时候我们必须要指定数组的长度;切片是变长的,它可以根据元素的增删自动改变数组的长度。我们也可以把切片当成是一个动态数组。从效率角度来看数组的效率优于切片。但在实际开发中,切片应用场景多一点。

不管是数组还是切片都具有以下性质:

  • 查找原素迅速
  • 插入元素困难
  • 排序速度慢

简单演示

func MyArray()  {
	a := [7] int{1,2,3,4,5,6,7}   // 数组, 一开始就分配好了内存,大小限定,不能拓展
	b := []int{1, 2, 3, 4, 5, 6, 7}  // 切片,大小没有限定,可以动态拓展

	for _, i := range a{
		fmt.Printf("a 数组遍历 %d\n", i)
	}

	for _, j := range b{
		fmt.Printf("b 切片遍历 %d\n", j)
	}

	// 输出数组的第二个元素
	fmt.Printf("a的第二个元素 %d\n", a[1])

	// 输出切片的第五个元素
	fmt.Printf("b的第五个元素 %d\n", b[4])
}

性能测试

新建 Array_test.go

package main

import "testing"

func BenchmarkArr(b *testing.B){
	for i:=0; i<b.N;i++  {
		Arr()
	}
}

func BenchmarkSli(b *testing.B)  {
	for i:=0; i<b.N;i++  {
		Sli()
	}
}

打开终端分别执行

go test -run=xxx -bench=BenchmarkArr -benchtime="3s" -cpuprofile profile_cpu.out

go test -run=xxx -bench=BenchmarkSli -benchtime="3s" -cpuprofile profile_cpu.out

通过测试结构我们可以明显的看到数组的整体效率优于切片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值