golang切片append扩容特点的测试

本文通过测试探讨了Go语言中切片使用append方法进行扩容的特点,通常情况下扩容以二倍进行,但在特定情况下,扩容可能是切片长度加1。结论是,当二倍扩容不足以容纳新元素时,切片会按当前长度加1的方式扩容。
摘要由CSDN通过智能技术生成

最近看golang , 网上讲最多的是append扩容切片, 会以二倍增加容量, 经过测试证明在大多数情况下是以二倍增长, 但是有极少数情况并不是二倍增长 , 而是切片长度+1 增加容量

结论: 

append 对切片扩容, 如果以二倍增加也存放不下的情况以len(slice) +1 扩容

测试代码

package main

import (
	"fmt"
	"math/rand"
	"time"
)

// 获到一个随机长度切片
func getRandLengArr(max int) (slice []int) {
	rand.Seed(time.Now().UnixNano())
	arrLen := rand.Intn(max-1) + 1

	for i := 0; i < arrLen; i++ {
		slice = append(slice, rand.Intn(100))

	}
	return

}

// 测试append扩容特点
// 要多运行几次,会发现, 有极少数情况并不是以2倍的增长扩容
func main() {
	slice := make([]int, 0, 0)
	oldCap := cap(slice)
	for i := 0; i < 10; i++ {
		slice = append(slice, getRandLengArr(5)...)
		if currCap := cap(slice); currCap > oldCap {
			if oldCap == 0 {
				fmt.Printf("currlen=%d oldcap->currcap:%d->%d 初次增长\n", len(slice), oldCap, currCap)

			} else if currCap == len(slice)+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值