面试题答案
一键面试- 扩容倍数及策略:
- 当切片的容量小于1024时,扩容时新的容量会直接翻倍。例如,原切片容量为
cap = 512
,当需要扩容时,新的容量newCap = 1024
。 - 当切片的容量大于或等于1024时,扩容时新的容量会增加原容量的1/4。例如,原切片容量为
cap = 1024
,当需要扩容时,新的容量newCap = 1024 + 1024/4 = 1280
。
- 当切片的容量小于1024时,扩容时新的容量会直接翻倍。例如,原切片容量为
- 特殊情况:
- 如果通过
append
追加元素后所需的容量小于当前容量的两倍(对于容量小于1024的切片)或者小于当前容量加上当前容量的1/4(对于容量大于等于1024的切片),Go语言会尽量分配一个不小于所需容量且满足上述扩容策略的容量,以减少后续扩容的次数。 - 另外,如果所需的容量超过了上述扩容策略计算出的容量,那么会直接分配所需的容量。例如,原切片容量为
cap = 512
,但通过append
需要追加大量元素,所需容量为2048
,此时会直接分配容量为2048
,而不是按照翻倍策略分配1024
。
- 如果通过