add explanation for go slice

This commit is contained in:
ClorisMoQi
2022-03-03 22:40:31 -08:00
parent fdedb546b3
commit e83846db04
2 changed files with 14 additions and 0 deletions

View File

@ -226,7 +226,13 @@ Python
Go
Go中slice的`append`操作和C++中vector的扩容机制基本相同。
说是基本呢,其实是因为大家平时刷题和工作中遇到的数据不会特别大。
具体来说当当前slice的长度小于**1024**时,执行`append`操作新slice的capacity会变成当前的2倍而当slice长度大于等于**1024**时slice的扩容变成了每次增加当前slice长度的**1/4**。
在Go Slice的底层实现中如果capacity不够时会做一个reslice的操作底层数组也会重新被复制到另一块内存区域中所以`append`一个元素不一定是O(1), 也可能是O(n)哦。
-----------------------

View File

@ -171,6 +171,14 @@ Python
Go
Go中slice的`append`操作和C++中vector的扩容机制基本相同。
说是基本呢,其实是因为大家平时刷题和工作中遇到的数据不会特别大。
具体来说当当前slice的长度小于**1024**时,执行`append`操作新slice的capacity会变成当前的2倍而当slice长度大于等于**1024**时slice的扩容变成了每次增加当前slice长度的**1/4**。
在Go Slice的底层实现中如果capacity不够时会做一个reslice的操作底层数组也会重新被复制到另一块内存区域中所以`append`一个元素不一定是O(1), 也可能是O(n)哦。