更新時(shí)間:2020-07-06 16:33:53 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2603次
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
List子類
AbstractList抽象類
該類實(shí)現(xiàn)了基本的List集合功能,如果實(shí)現(xiàn)的是只讀的List集合,繼承自該抽象類的子類只需要實(shí)現(xiàn)get(intindex)和size()兩個(gè)方法,如果是可操作的List集合,則必須重寫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);重寫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)
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重寫了Iterator和ListIterator,內(nèi)部直接通過(guò)遍歷數(shù)組實(shí)現(xiàn)
ArrayList重寫了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);得到指定元素第一次在集合中的位置,重寫了AbstractList類的方法,內(nèi)部直接遍歷元素?cái)?shù)組實(shí)現(xiàn)intlastIndexOf(Objecto);同上Objectclone();重寫了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用以比較集合中元素的大小

Java技術(shù)內(nèi)容
Java中List集合:http://www.soulsinkind.com/tutorial_java_advance/637.html
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java編程中l(wèi)ist集合的詳解”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)