go語言container包中的那些容器
主要內(nèi)容
List和Element。前者實(shí)現(xiàn)了一個雙向鏈表(以下簡稱鏈表),而后者則代表了鏈表中元素的結(jié)構(gòu)。
List和Element都是結(jié)構(gòu)體類型。結(jié)構(gòu)體類型有一個特點(diǎn),那就是它們的零值都會是擁有其特定結(jié)構(gòu),但沒有任何定制化內(nèi)容的值,相當(dāng)于一個空殼
List的主要方法:
MoveBefore:給定的元素移動到另一個元素的前面
MoveAfter:給定的元素移動到另一個元素的后面
MoveToFront:把給定的元素移動到鏈表的最前端
MoveToBack:把給定的元素移動到鏈表的最后端
Front:獲取鏈表中最前端
Back:獲取鏈表中最后端
InsertBefore:指定的元素之前插入新元素
InsertAfter:指定的元素之后插入新元素
PushFront:用于在鏈表的最前端插入新元素。
PushBack:用于在鏈表的最前端插入新元素。
注意點(diǎn)
在List包含的方法中,用于插入新元素的那些方法都只接受interface{}類型的值。這些方法在內(nèi)部會使用Element值包裝接收到的新元素。
這樣做正是為了避免直接使用我們自己生成的元素,主要原因是避免鏈表的內(nèi)部關(guān)聯(lián)遭到外界破壞,這對于鏈表本身以及我們這些使用者來說,都是有益的。
為什么鏈表可以做到開箱即用?
延遲初始化,你可以理解為把初始化操作延后,僅在實(shí)際需要的時候才進(jìn)行。延遲初始化的優(yōu)點(diǎn)在于“延后”,它可以分散初始化操作帶來的計算量和存儲空間消耗。
List利用了自身,以及Element在結(jié)構(gòu)上的特點(diǎn),巧妙地平衡了延遲初始化的優(yōu)缺點(diǎn),使得鏈表可以開箱即用,并且在性能上可以達(dá)到最優(yōu)。