slice扩容
程序员文章站
2023-03-30 22:32:29
1、当向切片新加入数据,原切片数据加上新数据长度不超过切片容量时,直接加入切片末尾,容量大小不变. 2、当加入新的数据后,数据长度超出原切片的容量大小2倍,则切片的容量会是数据长度(偶数)或数据长度(奇数)+1. 3、当加入新的数据后,数据长度未超出原切片的容量大小2倍,则切片的容量扩充一倍. ca ......
1、当向切片新加入数据,原切片数据加上新数据长度不超过切片容量时,直接加入切片末尾,容量大小不变.
2、当加入新的数据后,数据长度超出原切片的容量大小2倍,则切片的容量会是数据长度(偶数)或数据长度(奇数)+1.
3、当加入新的数据后,数据长度未超出原切片的容量大小2倍,则切片的容量扩充一倍.
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var arr = [20]int{1, 2, 34, 5, 5, 5, 5, 667, 7} 9 a1 := arr[:3:3] 10 a11 := arr[:3:3] 11 12 fmt.printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1)) 13 14 var a2 = []int{1, 2, 2, 3} 15 a1 = append(a1, a2...) //总数据长度是7,容量扩容2倍装不下 2*3=6 16 //长度是数据长度7+1=8 17 //数据长度是奇数,容量为数据长度+1; 18 //数据长度是偶数,容量为数据长度 19 var a22 = []int{1, 2, 2, 3, 4} 20 a11 = append(a11, a22...) 21 fmt.printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1)) 22 fmt.printf("cap(a11)=%d,len(a11)=%d\n", cap(a11), len(a11)) 23 24 a3 := arr[:3:6] //容量6 25 fmt.printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3)) 26 27 a3 = append(a3, a2...) //总数据长度是7,容量扩容2倍可以装下 2*6=12 28 fmt.printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3)) 29 30 }
输出
cap(a1)=3,len(a1)=3
cap(a1)=8,len(a1)=7
cap(a11)=8,len(a11)=8
cap(a3)=6,len(a3)=3
cap(a3)=12,len(a3)=7
上一篇: 下班回家刚到门口
下一篇: 女友从家乡来我所在的城市工作