java的源碼分析 list

List在數據結構中表現爲是線性表的方式,其元素以線性方式存儲,集合中容許存放重複的對象,List接口主要的實現類有數組

就數據結構而言,數據的對應方式分爲一對一,0對0,一對多,多對多。在數據結構上就是線性表,集合,樹,圖。而list就是一個線性表。
ArrayList
ArrayList其實就是一組長度可變的數組,當實例化了一個ArrayList,該數據也被實例化了,當向集合中添加對象時,數組的大小也隨着改變, 這樣它所帶來的有優勢是快速的隨機訪問,即便訪問每一個元素所帶來的性能問題也是很小的,但缺點就是想其中添加或刪除對象速度慢,當你建立的數組是不肯定其 容量,因此當咱們改變這個數組時就必須在內存中作不少的處理,如你想要數組中任意兩個元素中間添加對象,那麼在內存中數組要移動全部後面的對象。
可變的數組這幾個詞語的含義就是,他的本質仍然是數組,數組的特色就是一塊連續的內存,而且讀取速度很快,由於能夠按照下標訪問,直接命中。add須要移動數據,對應的get和set須要的是直接命中
LinkedList
LinkedList是經過節點的鏈接實現鏈表的數據結構,向linkedList中插入或刪除元素的速度是特別快,而隨機訪問的速度相對較慢,這個是由 於鏈表自己的性質形成的,在鏈表中,每一個節點都包含了前一個節點的引用,後一個節點的引用和節點存儲值,當一個新節點插入式,只須要修改其中相關的先後關 系節點引用便可,刪除節點也是同樣。操做對象只須要改變節點的連接,新節點能夠存放在內存的任何位置,但也就是由於如此LinkedList雖然存在 get()方法,可是這個方法經過遍歷節點來定位因此速度很慢。LinkedList還單獨具 addFrist(),addLast(),getFrist(),getLast(),removeFirst(),removeLast()方法,這 些方法使得LinkedList能夠做爲堆棧,隊列,和雙隊列來使用。

說白了,ArrayList和LinkedList就是數據結構中的順序存儲表和鏈式存儲表。


數據結構

相關文章
相關標籤/搜索