“對你的大腦進行一些訓練怎麼樣?我希望它還能正常工作。”
“之前,在容器和集合表中,您看到同一個接口可以有多個實現。現在我將告訴您我們為什麼需要它。以及ArrayList與LinkedList有何不同。”
“問題是,集合可能以不同的方式實現,沒有一種實現總是理想的。 在一種方法中,一些操作很快,但另一些很慢。相反的情況可能適用於另一種方法。沒有完美的統一尺寸 -適合所有人的解決方案。”
“這就是為什麼決定實現同一個集合的多個版本。每個實現都應該針對一些狹窄的操作集進行優化。這就是不同集合的形成方式。讓我們以兩個類為例:ArrayList和LinkedList。”

》在內部,ArrayList是作為一個普通的數組來實現的。這就是為什麼在中間插入一個元素需要我們先將後面的所有元素移位一位,然後將新元素放入空閒槽中。獲取和設置元素(get,set ) 很快,因為這些操作只是處理相關的數組元素。”
“ LinkedList具有不同的內部結構。它被實現為具有相互連接的元素的列表:一組不同的元素,每個元素存儲對列表中下一個和上一個元素的引用。要將元素插入到這樣的列表的中間,你只需要改變它未來鄰居的引用。但是,要獲取第 130 號元素,你必須遍歷從 0 到 130 的每個對象。換句話說,get 和 set 操作會很慢。看下表:“
描述 | 手術 | 數組列表 | 鍊錶 |
---|---|---|---|
獲取一個元素 | 得到 | 快速地 | 慢的 |
設置一個元素 | 放 | 快速地 | 慢的 |
添加一個元素(到列表的末尾) | 添加 | 快速地 | 快速地 |
插入一個元素(在任意位置) | 添加(我,價值) | 慢的 | 快速地 |
刪除一個元素 | 消除 | 慢的 | 快速地 |
“我明白了。我現在開始明白了。是否有任何標准或規則可以幫助我知道在特定情況下哪種收藏最好?”
“為簡單起見,我會給你以下規則:如果你要經常在集合中間插入(或刪除)元素,最好使用 LinkedList 。在所有其他情況下, ArrayList效果更好。 ”
“我們將在更高級的課程中深入研究它們的結構,但現在我們只是練習使用它們。”
GO TO FULL VERSION