面试题答案
一键面试- 扩容规则:
- 如果新的容量(
newCap
)小于2倍的旧容量(oldCap
),则新容量会设置为2倍的旧容量。 - 如果新的容量大于等于2倍旧容量,直接使用新容量。
- 如果旧切片的容量小于1024,新容量会直接设置为旧容量的2倍。
- 如果旧切片的容量大于等于1024,新容量会在旧容量的基础上增加1/4。
- 如果新的容量(
- 扩容过程:
- 首先根据上述规则计算出新的容量。
- 然后分配一个新的底层数组,大小为新计算出的容量。
- 接着将旧切片中的元素逐个复制到新的底层数组对应的位置上。
- 最后,切片指向新的底层数组,完成扩容。
例如:
package main
import (
"fmt"
)
func main() {
s := make([]int, 0, 5)
for i := 0; i < 10; i++ {
s = append(s, i)
}
fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}
在这个例子中,初始容量为5,随着元素不断追加,容量会按照上述规则扩容。