面试题答案
一键面试切片动态扩容规则
- 小于1024个元素:如果切片的容量小于1024个元素,那么扩容时切片的容量会翻倍。
- 大于等于1024个元素:如果切片的容量大于等于1024个元素,那么扩容时切片的容量会增加原来容量的1/4。
- 内存分配:扩容时会重新分配内存,将原切片的数据复制到新的内存地址。
代码示例
package main
import (
"fmt"
)
func main() {
s := make([]int, 0, 5)
for i := 0; i < 20; i++ {
s = append(s, i)
fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}
}
在上述代码中,我们初始化了一个容量为5的切片 s
。然后通过 append
不断向切片中添加元素,并打印每次添加后的长度和容量。随着元素的添加,当容量不足时,会按照上述规则扩容,通过打印的容量变化即可观察到扩容现象。