這篇文章主要為大家展示了“java集合中l(wèi)ist的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java集合中l(wèi)ist的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)是一家專業(yè)提供海滄企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站制作、html5、小程序制作等業(yè)務(wù)。10年已為海滄眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。1、List接口
該接口定義的元素是有序的且可重復(fù)的。相當(dāng)于數(shù)學(xué)里面的數(shù)列,有序可重復(fù)
booleanaddAll(intindex,Collection<?extendsE>c);將指定集合中所有元素,插入至本集合第index個(gè)元素之后defaultvoidreplaceAll(UnaryOperatoroperator);替換集合中每一個(gè)元素值defaultvoidsort(Comparator<?superE>c);給集合中的元素進(jìn)行排序Eget(intindex);獲取集合中第index個(gè)元素Eset(intindex,Eelement);將集合中第index個(gè)元素替換成指定元素voidadd(intindex,Eelement);向集合中第index個(gè)位置添加一個(gè)元素Eremove(intindex);移除集合中第index個(gè)元素intindexOf(Objecto);得到指定元素在集合中的位置(第一次出現(xiàn))intlastIndexOf(Objecto);得到指定元素在集合中的位置(最后一次出現(xiàn))ListIteratorlistIterator();返回ListIteratorListIteratorlistIterator(intindex);返回ListIterator,并設(shè)置當(dāng)前位置ListsubList(intfromIndex,inttoIndex);截取List,從fromIndex到toIndex
2、List子類
2.1、AbstractList抽象類
該類實(shí)現(xiàn)了基本的List集合功能,如果實(shí)現(xiàn)的是只讀的List集合,繼承自該抽象類的子類只需要實(shí)現(xiàn)get(intindex)和size()兩個(gè)方法,如果是可操作的List集合,則必須重寫(xiě)add和set方法,否則執(zhí)行add和set時(shí)會(huì)拋出UnsupportedOperationException異常
AbstractList抽象類中的迭代器通過(guò)get(intindex)訪問(wèn)元素,通過(guò)remove(Objecto)刪除元素。
AbstractList抽象類包含了一個(gè)SubList子類,該子類通過(guò)包裝一個(gè)AbstractList抽象類對(duì)象實(shí)現(xiàn)元素的添加、刪除等功能。
該抽象類主要實(shí)現(xiàn)了如下方法:
booleanadd(Ee);添加元素e,內(nèi)部調(diào)用add(intindex,Eelement)實(shí)現(xiàn)intindexOf(Objecto);得到指定元素第一次在集合中的位置,內(nèi)部通過(guò)List迭代器實(shí)現(xiàn)intlastIndexOf(Objecto);得到指定元素在集合中的位置(最后一次出現(xiàn)),內(nèi)部List迭代器實(shí)現(xiàn),注意此處是從后往前迭代voidclear();清空List集合中的元素,內(nèi)部通過(guò)List迭代器實(shí)現(xiàn)booleanaddAll(intindex,Collection<?extendsE>c);插入集合c中所有元素,內(nèi)部調(diào)用add(intindex,Eelement)實(shí)現(xiàn)Iteratoriterator();返回一個(gè)迭代器對(duì)象,AbstractList抽象類內(nèi)部實(shí)現(xiàn)了一個(gè)迭代器ListIteratorlistIterator();返回一個(gè)List迭代器對(duì)象,AbstractList抽象類內(nèi)部實(shí)現(xiàn)了一個(gè)List迭代器booleanequals(Objecto);重寫(xiě)Object的equals方法,內(nèi)部先判斷是否同一個(gè)對(duì)象,是返回true,否則判斷o是否是List對(duì)象,不是返回false,是的話迭代比較兩個(gè)集合中每一個(gè)元素是否一致,都一致返回trueinthashCode();內(nèi)部迭代集合中每一個(gè)元素計(jì)算出hashcode值ListsubList(intfromIndex,inttoIndex);得到List集合的子集合,內(nèi)部通過(guò)構(gòu)造AbstractList內(nèi)部的SubList實(shí)現(xiàn)
2.2、ArrayList
ArrayList繼承自AbstractList實(shí)現(xiàn)了List中所有方法,該集合可以插入任何元素包括null元素。
ArrayList內(nèi)部使用數(shù)組保存元素,他的size、isEmpty、get、set、add等操作都是常數(shù)時(shí)間。在獲取元素時(shí)會(huì)比LinkedList更有優(yōu)勢(shì)。
Arraylist有一個(gè)初始的大小,該大小會(huì)隨著元素的增加而增長(zhǎng)。
ArrayList不是線程安全的,在多線程環(huán)境下使用時(shí)需要注意,我們可以通過(guò)Collections.synchronizedList(newArrayList(…));操作得到一個(gè)線程安全的ArrayList
ArrayList中的迭代器在List集合結(jié)果變化后,我們調(diào)用迭代器中的方法時(shí)會(huì)快速拋出ConcurrentModificationException異常通知程序,以免造成損失。
ArrayList的擴(kuò)展策略:
在初始集合為空時(shí),加入元素時(shí)會(huì)初始化Math.max(DEFAULT_CAPACITY,minCapacity)個(gè)空間,即取插入元素個(gè)數(shù)和DEFAULT_CAPACITY中比較大的那個(gè)數(shù)
集合非空時(shí)插入元素,如果空間不夠時(shí),則取原集合大小擴(kuò)展2倍和最小需求大小中較大的那個(gè)進(jìn)行擴(kuò)展
ArrayList重寫(xiě)了Iterator和ListIterator,內(nèi)部直接通過(guò)遍歷數(shù)組實(shí)現(xiàn)
ArrayList重寫(xiě)了SubList類,該類直接通過(guò)訪問(wèn)數(shù)組實(shí)現(xiàn)
ArrayList主要包括以下屬性:
transientObject[]elementData;該對(duì)象數(shù)組用于存放集合中的元素intsize;該屬性用于保存集合的大小transientintmodCount;記錄ArrayList修改的次數(shù),在集合迭代器中會(huì)使用該數(shù)字判斷迭代時(shí)集合是否修改過(guò)
ArrayList主要包含以下構(gòu)造函數(shù):ArrayList(intinitialCapacity);構(gòu)造初始大小為initialCapacity的集合對(duì)象ArrayList();構(gòu)造一個(gè)空的數(shù)組元素ArrayList(Collection<?extendsE>c);使用傳入集合c構(gòu)造一個(gè)集合對(duì)象
ArrayList主要包括以下函數(shù):
voidtrimToSize();將集合中數(shù)組大小恢復(fù)至當(dāng)前集合大小,該操作可以壓縮集合使用空間voidensureCapacity(intminCapacity);通過(guò)傳入的minCapacity判斷集合是否需要擴(kuò)展,需要的話則擴(kuò)展數(shù)組大小,已足夠存放元素intindexOf(Objecto);得到指定元素第一次在集合中的位置,重寫(xiě)了AbstractList類的方法,內(nèi)部直接遍歷元素?cái)?shù)組實(shí)現(xiàn)intlastIndexOf(Objecto);同上Objectclone();重寫(xiě)了clone方法,并且將元素?cái)?shù)組復(fù)制一份出來(lái),且將modCount致0,注意此處數(shù)組中元素并沒(méi)有clone,也就是說(shuō)克隆后的集合和元集合使用同一份具體元素Object[]toArray();直接返回本集合中的數(shù)組Eget(intindex);直接訪問(wèn)數(shù)組Eset(intindex,Eelement);直接設(shè)置數(shù)組元素值booleanadd(Ee);直接操作數(shù)組,想數(shù)組添加一個(gè)元素Eremove(intindex);直接操作數(shù)組booleanremove(Objecto);一樣遍歷數(shù)組,注意該操作會(huì)導(dǎo)致數(shù)組移動(dòng)voidclear();遍歷將數(shù)組致空,同時(shí)設(shè)置size大小為0booleanaddAll(Collection<?extendsE>c);通過(guò)數(shù)組直接添加voidsort(Comparator<?superE>c);實(shí)現(xiàn)集合中元素排序功能,接收一個(gè)Comparator用以比較集合中元素的大小
2.3、AbstractSequentialList抽象類
AbstractSequentialList是一個(gè)抽象類,繼承自AbstractList抽象類
AbstractSequentialList內(nèi)部基于鏈表實(shí)現(xiàn),主要針對(duì)順序訪問(wèn)list集合的情況,它在隨機(jī)訪問(wèn)時(shí)表現(xiàn)較差
AbstractSequentialList的實(shí)現(xiàn)者需要提供listIterator和size兩個(gè)實(shí)現(xiàn),AbstractSequentialList內(nèi)部本身通過(guò)listIterator實(shí)現(xiàn)了其他函數(shù)
ArrayList主要包含以下函數(shù):
Eget(intindex);獲取第index個(gè)元素,內(nèi)部通過(guò)ListIterator實(shí)現(xiàn)Eset(intindex,Eelement);替換集合的第index個(gè)元素,內(nèi)部通過(guò)ListIterator實(shí)現(xiàn)voidadd(intindex,Eelement);想list集合中插入元素,內(nèi)部通過(guò)voidadd(intindex,Eelement)實(shí)現(xiàn)Eremove(intindex);刪除list中第index個(gè)元素,內(nèi)部通過(guò)ListIterator實(shí)現(xiàn)booleanaddAll(intindex,Collection<?extendsE>c);添加另一個(gè)集合中的所元素,內(nèi)部通過(guò)ListIterator實(shí)現(xiàn)Iteratoriterator();直接調(diào)用listIterator()方法
2.4、LinkedList
LinkedList繼承自AbstractSequentialList抽象類,實(shí)現(xiàn)了List、Deque、Cloneable、和Serializable接口
LinkedList內(nèi)部基于雙向鏈表實(shí)現(xiàn),允許插入任何元素,包括null
LinkedList不是線程安全的,在多線程環(huán)境下使用時(shí)需要注意,我們可以通過(guò)Collections.synchronizedList(newLinledList(…));操作得到一個(gè)線程安全的ArrayList
LinkedList中的迭代器在List集合結(jié)果變化后,我們調(diào)用迭代器中的方法時(shí)會(huì)快速拋出ConcurrentModificationException異常通知程序,以免造成損失。
LinkedList內(nèi)部使用Node類存儲(chǔ)元素,該類包含下面三個(gè)屬性,
Eitem;保存元素值得對(duì)象
Nodenext;下一個(gè)節(jié)點(diǎn)對(duì)象
Nodeprev;上一個(gè)節(jié)點(diǎn)對(duì)象
LinkedList重寫(xiě)了ListIterator,內(nèi)部直接通過(guò)遍歷鏈表實(shí)現(xiàn)迭代器功能
LinkedList主要包含以下屬性
transientintsize=0;集合當(dāng)前大小transientNodefirst;鏈表的首元素transientNodelast;鏈表的尾元素
LinkedListList主要包含以下構(gòu)造函數(shù):LinkedList();空構(gòu)造函數(shù)LinkedList(Collection<?extendsE>c);使用另外一個(gè)集合的構(gòu)造函數(shù),會(huì)將另一個(gè)集合所有元素加入本集合中
LinkedList主要包含以下函數(shù):
自有函數(shù)
voidlinkFirst(Ee);插入元素至第一個(gè)位置voidlinkLast(Ee);插入元素至最后一個(gè)位置voidlinkBefore(Ee,Nodesucc);在某個(gè)元素之前插入一個(gè)元素EunlinkFirst(Nodef);移除第一個(gè)元素EunlinkLast(Nodel);移除最后一個(gè)元素Eunlink(Nodex);移除指定元素EgetFirst();得到第一個(gè)元素EgetLast();得到最后一個(gè)元素EremoveFirst();移除第一個(gè)元素EremoveLast();移除最后一個(gè)元素voidaddFirst(Ee);插入第一個(gè)元素voidaddLast(Ee);插入最后一個(gè)元素Nodenode(intindex);返回index對(duì)應(yīng)的Node節(jié)點(diǎn)
List函數(shù)
booleancontains(Objecto);是否包含某個(gè)元素intsize();返回集合大小,直接返回size變量booleanadd(Ee);添加一個(gè)元素,調(diào)用linkLast(e);booleanremove(Objecto);刪除指定元素,通過(guò)遍歷鏈表刪除booleanaddAll(Collection<?extendsE>c);將集合c插入至本集合,鏈表插入voidclear();遍歷鏈表,清空所有元素,將首尾元素制空Eget(intindex);獲取第index個(gè)元素,通過(guò)node(index)得到node節(jié)點(diǎn)Eset(intindex,Eelement);替換第index個(gè)元素,通過(guò)node(index)得到node節(jié)點(diǎn),然后設(shè)置值voidadd(intindex,Eelement);在第index位置插入元素,調(diào)用linkBefore(element,node(index));Eremove(intindex);刪除第index個(gè)元素,通過(guò)unlink(node(index));實(shí)現(xiàn)intindexOf(Objecto);得到o對(duì)象在集合中的位置(第一次出現(xiàn)),通過(guò)遍歷鏈表實(shí)現(xiàn),從頭部開(kāi)始遍歷intlastIndexOf(Objecto)得到o對(duì)象在集合中的位置(最后一次出現(xiàn)),通過(guò)遍歷鏈表實(shí)現(xiàn),從尾部開(kāi)始遍歷
Deque函數(shù)Epeek();返回第一個(gè)元素,但不刪除。直接去first首元素,集合空時(shí),返回nullEelement();返回第一個(gè)元素,但不刪除。集合空時(shí)拋出異常,調(diào)用getFirst();Eremove();獲得并移除隊(duì)列頂部元素,如果隊(duì)列為空拋出異常,調(diào)用removeFirstEpoll();獲得并移除隊(duì)列頂部元素,如果隊(duì)列為空返回null調(diào)用unlinkFirst(f)booleanoffer(Ee);隊(duì)列尾部插入元素,調(diào)用add(e)booleanofferFirst(Ee);隊(duì)列首部插入元素,調(diào)用addFirst(e);booleanofferLast(Ee);隊(duì)列尾部插入元素,調(diào)用addLast(e)EpeekFirst();返回首元素EpeekLast();返回最后一個(gè)元素,不刪除,空時(shí)返回nullEpollFirst();獲得并移除隊(duì)列頂部元素,如果隊(duì)列為空返回null調(diào)用unlinkFirst(f)EpollLast();獲得并移除隊(duì)列尾部元素,如果隊(duì)列為空返回null調(diào)用unlinkLast(f)voidpush(Ee);向首部插入元素,調(diào)用addFirst(e);,棧方法Epop();返回并移除首元素,調(diào)用removeFirst();,棧方法booleanremoveFirstOccurrence(Objecto);刪除第一次出現(xiàn)o的元素,調(diào)用remove(o);函數(shù)booleanremoveLastOccurrence(Objecto);刪除最后一次出現(xiàn)o的元素,從后向前遍歷鏈表,匹配后移除
2.5、Vector
功能和ArrayList類似,不同的是Vector是線程安全的,其大部分方法都加了synchronized關(guān)鍵字以保證多線程環(huán)境下線程安全問(wèn)題。不過(guò)在可以確保沒(méi)有線程安全問(wèn)題的情況下,我們還是應(yīng)該選擇ArrayList,因?yàn)锳rrayList的效率要比Vector高。
2.6、CopyOnWriteArrayList
CopyOnWriteArrayList繼承Object,實(shí)現(xiàn)了List,RandomAccess,Cloneable,java.io.Serializable接口
CopyOnWriteArrayList是
CopyOnWriteArrayList內(nèi)部使用數(shù)組保存元素,但是它的數(shù)組大小等于集合的大小,因?yàn)樗脑黾?、刪除、修改元素都是新copy一份數(shù)組
CopyOnWriteArrayList是線程安全的,他的寫(xiě)操作加鎖,讀操作沒(méi)有加鎖,適用于讀多寫(xiě)少的情況
CopyOnWriteArrayList實(shí)現(xiàn)了Iterator和ListIterator,內(nèi)部通過(guò)遍歷數(shù)組實(shí)現(xiàn),但是它的迭代器不支持操作元素。會(huì)拋出UnsupportedOperationException
CopyOnWriteArrayList主要包含以下屬性:
finaltransientReentrantLocklock;CopyOnWriteArrayList內(nèi)部使用的線程同步鎖transientvolatileObject[]array;集合內(nèi)部用于保存元素的地方
CopyOnWriteArrayList主要包含以下構(gòu)造函數(shù):
CopyOnWriteArrayList();構(gòu)造一個(gè)空的集合CopyOnWriteArrayList(Collection<?extendsE>c);創(chuàng)建一個(gè)包括闖入集合所有元素的集合CopyOnWriteArrayList(E[]toCopyIn);創(chuàng)建一個(gè)包含傳入數(shù)組所有元素的集合,注:此處會(huì)copy原有數(shù)組。
CopyOnWriteArrayList主要包括以下函數(shù):
finalObject[]getArray();得到集合持有的數(shù)組對(duì)象voidsetArray(Object[]a);設(shè)置集合的數(shù)組對(duì)象intsize();返回集合大小,直接返回?cái)?shù)組的長(zhǎng)度booleanisEmpty();判斷集合是否為空booleancontains(Objecto);判斷集合是否包含某元素intindexOf(Objecto);得到傳入元素在集合中第一次出現(xiàn)的位置索引intindexOf(Ee,intindex);得到傳入元素在集合中第一次出現(xiàn)的位置索引,從index開(kāi)始查找intlastIndexOf(Objecto);得到傳入元素在集合中最后一次出現(xiàn)的位置索引,從集合尾部開(kāi)始查找lastIndexOf(Ee,intindex);得到傳入元素在集合中出現(xiàn)的位置索引,從集合index開(kāi)始往前查找Objectclone();返回集合的clone,集合的元素沒(méi)有被cloneObject[]toArray();轉(zhuǎn)換成數(shù)組,此處返回的是數(shù)組的copyT[]toArray(Ta[]);轉(zhuǎn)換成數(shù)組,如果傳入數(shù)組小于當(dāng)前集合,重新申請(qǐng)一塊空間,否則使用數(shù)組a,當(dāng)數(shù)組a大于集合長(zhǎng)度時(shí)將數(shù)組a的臨近集合元素的第一個(gè)元素設(shè)置成null,可以方便用戶在知道集合不含null元素時(shí)判斷集合的大小Eget(intindex);獲取集合的index索引元素Eset(intindex,Eelement);設(shè)置集合的index元素的值booleanadd(Ee);往集合中添加元素voidadd(intindex,Eelement);插入元素至指定位置Eremove(intindex);移除指定位置的元素booleanremove(Objecto);移除第一次出現(xiàn)元素ovoidremoveRange(intfromIndex,inttoIndex);移除范圍內(nèi)的所有元素booleanaddIfAbsent(Ee);當(dāng)集合中不包含該元素時(shí),添加該元素booleanaddIfAbsent(Ee,Object[]snapshot);當(dāng)集合中不包含該元素且傳入數(shù)組中也不包含該元素時(shí),添加該元素booleancontainsAll(Collection<?>c);判斷集合是否全部包含傳入集合的元素booleanremoveAll(Collection<?>c);移除集合中c中所有元素booleanretainAll(Collection<?>c);移除集合中所有不在c中的元素intaddAllAbsent(Collection<?extendsE>c);遍歷c,當(dāng)c中元素不在集合中時(shí),加入至集合voidclear();清空集合booleanaddAll(Collection<?extendsE>c);將集合c中所有元素加入至集合中booleanaddAll(intindex,Collection<?extendsE>c);將集合c中所有元素插入至index后
2.7、Stack
Stack繼承自Vector,他表示一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),即棧。他擁有五種基本的操作即push、pop、peek、empty、search
Stack繼承自Vector,所以它也是線程安全的
Stack繼承自Vector,所以它內(nèi)部也是用數(shù)組存儲(chǔ)元素的
Stack自定義函數(shù)如下
Epush(Eitem);向棧頂添加一個(gè)元素Epop();從棧頂取出并刪除一個(gè)元素Epeek();得到棧頂元素booleanempty();判斷棧是否為空intsearch(Objecto);查找o的位置,存在返回距棧頂位置,否則返回-1
以上是“java集合中l(wèi)ist的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前題目:java集合中l(wèi)ist的示例分析-創(chuàng)新互聯(lián)
文章URL:http://www.rwnh.cn/article18/cciggp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站導(dǎo)航、外貿(mào)建站、網(wǎng)站設(shè)計(jì)、虛擬主機(jī)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容