Go数据结构与算法-数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yang731227/article/details/84984407

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

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

猜你喜欢

转载自blog.csdn.net/yang731227/article/details/84984407