go语言container包中的那些容器
主要内容
List
和Element
。前者实现了一个双向链表(以下简称链表),而后者则代表了链表中元素的结构。
List
和Element
都是结构体类型。结构体类型有一个特点,那就是它们的零值都会是拥有其特定结构,但没有任何定制化内容的值,相当于一个空壳
List的主要方法:
MoveBefore
:给定的元素移动到另一个元素的前面
MoveAfter
:给定的元素移动到另一个元素的后面
MoveToFront
:把给定的元素移动到链表的最前端
MoveToBack
:把给定的元素移动到链表的最后端
Front
:获取链表中最前端
Back
:获取链表中最后端
InsertBefore
:指定的元素之前插入新元素
InsertAfter
:指定的元素之后插入新元素
PushFront
:用于在链表的最前端插入新元素。
PushBack
:用于在链表的最前端插入新元素。
注意点
在List
包含的方法中,用于插入新元素的那些方法都只接受interface{}
类型的值。这些方法在内部会使用Element
值包装接收到的新元素。
这样做正是为了避免直接使用我们自己生成的元素,主要原因是避免链表的内部关联遭到外界破坏,这对于链表本身以及我们这些使用者来说,都是有益的。
为什么链表可以做到开箱即用?
延迟初始化,你可以理解为把初始化操作延后,仅在实际需要的时候才进行。延迟初始化的优点在于“延后”,它可以分散初始化操作带来的计算量和存储空间消耗。
List
利用了自身,以及Element
在结构上的特点,巧妙地平衡了延迟初始化的优缺点,使得链表可以开箱即用,并且在性能上可以达到最优。
网友评论