Go语言
存储结构:
1、切片
切片是Go中重要的数据类型,每个切片对象内部都维护着:数组指针(切片的地址)、切片长度、切片容量三个数据


长度是目前存储的数量,容量是最大存储数量
在向切片中追加的数据个数大于容量时,内部会自动扩容且每次扩容都当前容量的两倍(当容量超过1024时每次扩容则只增加当前容量的1/4容量),注意扩容之后地址会改变



切片的常见操作:
长度和容量:
len(v1)\cap(v1)
索引:
根据长度确定索引,根据索引获取值并且可以修改值
············
切片:切片得到的切片的内部数据地址是一致的
v2 := v1[1:3]
追加:append

删除:
//切片取前几位的时候地址是相同的
//但是后面赋值相当于给后面的覆盖掉了,所以v1也变了,但删除一位之后相当于最后会有重复的值

插入:

但是这种插入效率低下,所以插入操作尽可能不要用切片,用链表或者循环
变量赋值:
这种地址是不同的
整型、布尔类型、浮点型、字符串:
赋值也是重新开辟内存存储数据
数组:也是重新开辟内存,修改一者另一者不变

切片虽然地址不同,但是他内部存储的指针依然指向的是同一块地址,但是如果扩容的话就会重新开辟区域了

所以,目前学到的数据类型中,只有切片在修改内部元素时,会造成所有的赋值变量同时修改(不扩容的情况下)
切片和数组的区别:
切片修改数据时会导致所有赋值变量同时修改,且切片会自动扩容,数组在声明的时候容量定死了
Map(字典)类型:
键值对
这种类型最大的特点就是查找速度非常快,因为她的底层存储是基于哈希表存储的 (哈希表是取模+拉链法共同作用的)
特点:
键不能重复、键必须可哈希(目前所学习的可以哈希的有:int/bool/string/array)、无序
声明&初始化:


另外,键也可以是数组

常见操作:
长度:len
容量:cap会报错,因为容量是会重新计算的
但是容量在你刚开始设置上的时候,会计算出合适的容量(所以设置的容量并不一定是最终的容量
增删改查:

嵌套:
value中的嵌套:

key中的嵌套:
(键不重复,键可哈希)

map原理:整体存储结构


浙公网安备 33010602011771号