Go in Action读书笔记 基础collections

数组array特点

  • 长度固定
  • 内存连续分配,快速计算索引,性能好
  • var array [5]int 声明后数据类型和长度就不再改变
  • 如果需要对数组进行扩容,则需要创建一个更大的数组,然后把原始数组复制过去
  • 声明时所有元素初始化为零值
  • 数组中的值是可修改的
  • 只有数组长度和数据类型都一致的两个数组才可以互相赋值

切片slice特点

  • 就是动态数组

  • 通过append来实现动态增长

  • 通过再切片实现切片缩减

  • 底层的内存也是连续分配的,所以支持索引,迭代,垃圾回收

  • 切片内部实现

    • 地址指针指向底层数组头部 ---- 切片的底层是数组
    • 切片长度 ----- 切片能访问的元素的个数
    • 切片容量 ----- 切片允许的增长的元素个数
  • slice := make([]string,5) 只指定长度,切片长度和容量相等

  • slice := make([]string,3,5),切片可以访问长度内的元素,也就是前三个,如果需要访问后两个元素,则通过append函数进行扩容slice = append(slice,"abcd")

  • 切片长度不得小于容量

  • 多个切片共享同一个底层数组,当底层数组变化是,所有切片的引用都会变化

    • slice := []int{10,20,30,40,50}
      
      newSlice := slice[1:3]
      
      newSlice[1] = 35
      
      //此时底层的数组是 [10,20,35,40,50]
      //再做切片就能得到35
      
  • 把数组传递给函数时,传递的时切片本身(也就是底层数组的引用),不会复制底层数组

映射map特点

  • 无需的键值对,其实就是哈希表
  • 由于是无序的,所有用for k,v := range mapA的时候,不能保证返回的键值对的顺序
  • 添加键值对的语句和python是一致的 map["key"] = value
  • 求键值对的值
    • value,exists := map["key"] existstrue则存在这个键值对
    • value := map["key"],通过判断value == nil来判断是键值对是否存在
  • 删除键值对,内置函数delete(map,"key")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值