1.数组和切片

date: 2019-04-23 09:30:31

  • 切片是变长的,数组是定长的
  • 切片是引用类型,数组是值类型
  • 每个切片都有一个底层数组
  • 切片可以认为是一个变长的窗口,可以透过这个窗口访问底层数组的内容
  • 数组和切片有长度和容量的概念,可以通过函数lencap获取;数组的长度和容量一直相等;切片的长度可变,容量就是它的底层数组的长度。
  • 切片的底层数组不会改变,当切片长度超过容量需要扩容时,会创建一个新的切片和一个新的底层数组(长度为原来的2倍或者1.25倍)
s1 := make([]int, 5) //长度为5,容量为8(底层数组长度为5)的切片
s2 := make([]int, 5, 8) //长度为5,容量为8(底层数组长度为8)的切片
s3 := []int{1, 2, 3, 4, 5, 6, 7, 8} //
s4 := s3[3:6] //长度为3,容量为5(8-3),该切片最多能访问s3中的3->8
  • 数组和切片的比较
    • 切片本身有着占用内存少和创建便捷等特点,但它的本质上还是数组
    • 切片的一大好处是可以让我们通过窗口快速地定位并获取,或者修改底层数组中的元素。
    • 切片删除元素比较麻烦,需要元素复制,还需要注意清空空闲槽位
    • 切片的频繁扩容也是个严重的问题,因为扩容伴随着新的底层数组的不断产生,尤其是没有有效的缩容策略时
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。