面试题答案
一键面试多维数组在内存中的存储方式
在Go语言中,多维数组本质上是数组的数组。例如,二维数组 [m][n]T
实际上是由 m
个类型为 [n]T
的一维数组组成。这些一维数组在内存中是连续存储的,整体呈现线性排列。
对多维数组操作的影响
- 遍历:由于内存的连续性,按行遍历多维数组效率较高。因为这样的遍历顺序与内存中数据的存储顺序一致,减少了内存的跳跃访问,提高了缓存命中率。
- 访问特定元素:访问特定元素
arr[i][j]
时,计算偏移量相对简单。先根据外层数组索引i
找到对应的内层数组起始位置,再根据内层数组索引j
找到具体元素,时间复杂度为 O(1)。
高效遍历二维数组示例
package main
import "fmt"
func main() {
// 初始化一个二维数组
arr := [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
// 按行遍历
for _, row := range arr {
for _, val := range row {
fmt.Print(val, " ")
}
fmt.Println()
}
}
上述代码通过两个嵌套的 for... range
循环按行遍历二维数组,这是一种高效的遍历方式。