Go切片扩容

切片扩容

Go语言中切片扩容策略:

当调用Append函数向切片中添加元素时,可能导致切片的扩容。根据你调用Append函数的方式不同,切片有两种扩容方式:

  1. 调用Append函数向切片中添加一个元素。此时的扩容策略是当容量不足时,扩容至原容量的两倍,明显是土财主的做法;但是如果原切片容量已经超过了1024,那么切片容量将只会增加25%,也就是增加原容量的四分之一,谁让地主家也没有余粮呢。需要注意的是,如果原切片容量为零,那么就直接等于所需容量,也就是1。

    slice = make([]int, 0)    // cap:0
    slice = append(slice, 1)  // cap:1
    slice = append(slice, 1)  // cap:2
    slice = append(slice, 1)  // cap:4
    
  2. 调用Append函数向切片中添加多个元素。此时可能出现的一种情况是原切片容量扩大一倍之后任然装不下所有新增的元素,扩容策略是将容量扩展至大于等于所需容量的最小偶数。如果能装下那最好了,直接按原本的计划扩容就行了。比如原切片有1个元素,又添加了2个元素,那么所需容量为3,扩容后的容量为2,不够。比3大的最小偶数是4,因此此时扩容的结果就是4。

    slice = make([]int, 0)          // cap:0
    slice = append(slice, 1, 1, 1)  // cap:4
    slice = append(slice, 2, 2)     // cap:6
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值