面试题答案
一键面试在Go语言中,当切片的容量不足以容纳新的元素时,其容量增长遵循以下规则:
- 如果当前切片的容量小于1024,那么新的容量会翻倍。
- 如果当前切片的容量大于或等于1024,那么新的容量会增加当前容量的1/4。
以下是不同初始容量下切片容量增长的具体过程示例:
初始容量小于1024
package main
import (
"fmt"
)
func main() {
// 初始容量为5
s := make([]int, 0, 5)
// 添加元素,容量增长情况
for i := 0; i < 15; i++ {
s = append(s, i)
fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}
}
在上述示例中,初始容量为5,添加第6个元素时,容量翻倍为10;添加第11个元素时,容量再次翻倍为20。
初始容量大于或等于1024
package main
import (
"fmt"
)
func main() {
// 初始容量为1024
s := make([]int, 0, 1024)
// 添加元素,容量增长情况
for i := 0; i < 1300; i++ {
s = append(s, i)
fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s))
}
}
在这个示例中,初始容量为1024,添加第1025个元素时,容量增加1/4,变为1280(1024 + 1024/4)。