5、数组和Slice

1、数组与Slice的区别

区别 数组 Slice
长度 不可变 可变
类型 值类型 引用类型

引用类型有:字典类型、通道类型 、函数类型等
值类型有:基础数据类型、结构体类型

2、Slice的长度、容量

func main() {
    s1 := make([]int, 5)
    fmt.Printf("len   s1: %d\n", len(s1))
    fmt.Printf("cap   s1: %d\n", cap(s1))
    fmt.Printf("value s1: %d\n", s1)
    s2 := make([]int, 5, 8)
    fmt.Printf("len   s2: %d\n", len(s2))
    fmt.Printf("cap   s2: %d\n", cap(s2))
    fmt.Printf("value s2: %d\n", s2)
    s3 := s2[1:]
    fmt.Printf("len   s3: %d\n", len(s3))
    fmt.Printf("cap   s3: %d\n", cap(s3))
    fmt.Printf("value s3: %d\n", s3)
    s4 := s2[1:3]
    fmt.Printf("len   s4: %d\n", len(s4))
    fmt.Printf("cap   s4: %d\n", cap(s4))
    fmt.Printf("value s4: %d\n", s4)
}
//打印的信息为
len   s1: 5
cap   s1: 5
value s1: [0 0 0 0 0]
len   s2: 5
cap   s2: 8
value s2: [0 0 0 0 0]
len   s3: 4
cap   s3: 7
value s3: [0 0 0 0]
len   s4: 2
cap   s4: 7
value s4: [0 0]

1、怎样估算切片容量的长度

当一个切片容量不够时,slice会进行扩容。扩容不会改变原来的slice,会生成一个更大的slice,然后把原有的元素和新元素一并拷贝到新slice中。

在一般情况下,新slice的容量会是原slice容量的2倍。当原slice的容量大于或1024时,Go语言将会以原容量的1.25倍作为新容量的基准

2、切片的底层数组什么时候会被替换

注意:slice的底层数组永远不会被替换,因为在slice扩容的时候一定会生成新的底层数组

3、Slice浅拷贝与深拷贝

func main() {
   s2 := make([]int, 5, 8)
   s3 := s2[1:]
   s4 := s2[0:5]
   //深拷贝需要在拷贝前申请空间
   s5:=make([]int,6,8)
   //s5拷贝s3
   copy(s5,s3)
   s3[1]=1
   fmt.Printf("value s2: %d\n", s2)
   fmt.Printf("value s3: %d\n", s3)
   fmt.Printf("value s4: %d\n", s4)
   fmt.Printf("value s5: %d\n", s5)
}
打印
value s2: [0 0 1 0 0]
value s3: [0 1 0 0]
value s4: [0 0 1 0 0]
value s5: [0 0 0 0 0 0]

s3、s4对s2进行浅拷贝它们公用一个底层数组,所以s3[1]位置的元素设置为1,s2、s3、s4 索引为1的元素全变为1,s5则不然。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • …… 何为胜负?胜负即是苦。 人生来即苦,乃自然本性,万事万物皆然。世人苦其苦,渐生慈悲心。 何谓慈悲心? 禅曰,...
    云末未雨阅读 2,629评论 0 5
  • 不知从何时起,开始喜欢思考活着的意义。 不知多久在没曾经那份执着,有的只是如今的浑浑噩噩,如同麻木的机...
    活着丿阅读 3,535评论 1 0
  • 2018/11/5 2018/11/6 2018/11/15 2018/11/17 2018/11/21 2018...
    珍珍Pearl阅读 3,655评论 0 0
  • 我是一个胖子,当然是很胖的那种。我的胖,让人觉得是一种恶心,让人反胃的恶心。不知道为什么,我以前竟一点也没察觉...
    好奇害死猫_7696阅读 1,751评论 0 1

友情链接更多精彩内容