千鋒教育Java入門全套視頻教程(java核心技術(shù),適合java零基礎(chǔ),Java

ArrayList 和 LinkedList
1.ArrayList 是基于數(shù)組實(shí)現(xiàn)的,元素存放的位置都是連續(xù)的,查改效率高,增刪效率低,線程不安全;LinkedList是基于雙鏈表實(shí)現(xiàn)的,元素存放的位置不一定是連續(xù)的,增刪的效率高,查改的效率低,線程不安全。
2.LinkedList 比 ArrayList 更占內(nèi)存,因?yàn)長(zhǎng)inkedList 的節(jié)點(diǎn)除了存儲(chǔ)數(shù)據(jù),還存儲(chǔ)了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向后一個(gè)元素。對(duì)于隨機(jī)訪問(wèn),ArrayList要優(yōu)于LinkedList。
3.對(duì)于插入和刪除操作,LinkedList 優(yōu)于ArrayList (理論上),實(shí)際上并非如此,如果在List靠尾部的地方插入,那么ArraysList 只需要移動(dòng)較少的數(shù)據(jù),而LinkedList 則需要一直查找到列表尾部,反而耗費(fèi)較多時(shí)間,此時(shí)ArrayList 就比 LinkedList 快。
(1) 如果應(yīng)用程序?qū)?shù)據(jù)有較多的隨機(jī)訪問(wèn),ArrayList對(duì)象要優(yōu)于LinkedList對(duì)象
(2) 如果應(yīng)用程序有更多的插入或者是刪除操作,較少的隨機(jī)訪問(wèn),LinkedList對(duì)象要優(yōu)于ArrayList對(duì)象
ArrayList
ArrayList類實(shí)現(xiàn)類可變數(shù)組的大小,存儲(chǔ)在內(nèi)的數(shù)據(jù)稱為元素。它還提供了快速基于索引訪問(wèn)元素的方式,對(duì)尾部成員的增加和刪除支持較好。使用ArrayList創(chuàng)建的集合,允許對(duì)集合中的元素進(jìn)行快速的隨機(jī)訪問(wèn),不過(guò),向ArrayList中插入與刪除元素的速度相對(duì)較慢。
一個(gè)用數(shù)組實(shí)現(xiàn)的List,能進(jìn)行快速的隨機(jī)訪問(wèn),效率高而且實(shí)現(xiàn)了可變大小的數(shù)組。
它是可以調(diào)整大小的數(shù)組,實(shí)現(xiàn)了List接口。實(shí)現(xiàn)所有可選列表操作,并允許所有元素包括null。除了實(shí)現(xiàn)List接口之外,該類還提供了一些方法來(lái)操作內(nèi)部使用的存儲(chǔ)列表的數(shù)組的大小。內(nèi)部封裝一個(gè)數(shù)組,用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)。內(nèi)部數(shù)組的默認(rèn)初始容量為10,存滿后1.5倍增長(zhǎng)。
LinkedList
LinkedList類采用鏈表結(jié)構(gòu)保存對(duì)象,這種結(jié)構(gòu)的優(yōu)點(diǎn)是便于向集合中插入或者刪除元素。需要頻繁向集合中插入和刪除元素時(shí),使用LinkedList類比ArrayList類效果高,但是LinkedList類隨機(jī)訪問(wèn)元素的速度則相對(duì)較慢。這里的隨機(jī)訪問(wèn)是指檢索集合中特定索引位置的元素。
雙鏈表實(shí)現(xiàn)了List 和 Deque接口。實(shí)現(xiàn)所有可選列表操作,并允許所有元素(包括null)。所有的操作都能像雙向列表一樣。索引到列表中的操作將從開始或者結(jié)束遍歷列表,以更接近指定的索引為準(zhǔn)。
對(duì)順序訪問(wèn)進(jìn)行了優(yōu)化,但隨機(jī)訪問(wèn)的速度相對(duì)較慢??梢宰鳛闂;蜿?duì)列來(lái)用。