go语言中的链表 container/list 代码包
List(双向链表) Element(链表中元素的结构)
moveafter movebefore
movetofront movetoback
- 零值拥有特定结构 零值只做了声明 还未做初始化的变量被给予的缺省值
延迟初始化
ring类型 实现的事一个循环链表
list在内部就是一个循环链表 它的根元素永远不会持有任何实际的元素值,而该元素的存在就是为了连接这个循环链表的首尾两端。
給定的元素 都是*element类型的
- ring类型的数据结构仅由它本身即可代表,而list类型则需要它和element类型联合表示 这是表示方式上的不同 也是结构复杂度的不同
- ring类型的值 严格来讲 只是代表所属循环链表中的一个元素,而list类型则代表了一个完整的链表 这是表示维度上的不同
- 创建并初始化一个ring值的时候,可以指定包含的元素的数量 对于一个list值来说却不能这样做
- 初始化的时候 ring是长度为1 list的长度为0
- ring值的len方法 复杂度是n, list则是1 性能方面显而易见的差别
切片本身有着占用内存少和创建便捷等特点 但是它的本质上还是数组 切片的一大好处是可以通过窗口快速定位并获取 或者修改底层数组中的元素
想删除切片的元素时,元素复制无法避免。元素“槽位”的清空有可能造成内存泄漏
另外 切片频繁扩容 新的底层数组会不断产生 内存分配的量以及元素复制的次数就很可观了,对程序的性能产生负面的影响。