更新時間:2020-07-06 16:33:53 來源:動力節(jié)點 瀏覽2196次
List接口
該接口定義的元素是有序的且可重復的。相當于數(shù)學里面的數(shù)列,有序可重復
booleanaddAll(intindex,Collection<?extendsE>c);將指定集合中所有元素,插入至本集合第index個元素之后defaultvoidreplaceAll(UnaryOperatoroperator);替換集合中每一個元素值defaultvoidsort(Comparator<?superE>c);給集合中的元素進行排序Eget(intindex);獲取集合中第index個元素Eset(intindex,Eelement);將集合中第index個元素替換成指定元素voidadd(intindex,Eelement);向集合中第index個位置添加一個元素Eremove(intindex);移除集合中第index個元素intindexOf(Objecto);得到指定元素在集合中的位置(第一次出現(xiàn))intlastIndexOf(Objecto);得到指定元素在集合中的位置(最后一次出現(xiàn))ListIteratorlistIterator();返回ListIteratorListIteratorlistIterator(intindex);返回ListIterator,并設置當前位置ListsubList(intfromIndex,inttoIndex);截取List,從fromIndex到toIndex
List子類
AbstractList抽象類
該類實現(xiàn)了基本的List集合功能,如果實現(xiàn)的是只讀的List集合,繼承自該抽象類的子類只需要實現(xiàn)get(intindex)和size()兩個方法,如果是可操作的List集合,則必須重寫add和set方法,否則執(zhí)行add和set時會拋出UnsupportedOperationException異常
AbstractList抽象類中的迭代器通過get(intindex)訪問元素,通過remove(Objecto)刪除元素。
AbstractList抽象類包含了一個SubList子類,該子類通過包裝一個AbstractList抽象類對象實現(xiàn)元素的添加、刪除等功能。
該抽象類主要實現(xiàn)了如下方法:
booleanadd(Ee);添加元素e,內(nèi)部調(diào)用add(intindex,Eelement)實現(xiàn)intindexOf(Objecto);得到指定元素第一次在集合中的位置,內(nèi)部通過List迭代器實現(xiàn)intlastIndexOf(Objecto);得到指定元素在集合中的位置(最后一次出現(xiàn)),內(nèi)部List迭代器實現(xiàn),注意此處是從后往前迭代voidclear();清空List集合中的元素,內(nèi)部通過List迭代器實現(xiàn)booleanaddAll(intindex,Collection<?extendsE>c);插入集合c中所有元素,內(nèi)部調(diào)用add(intindex,Eelement)實現(xiàn)Iteratoriterator();返回一個迭代器對象,AbstractList抽象類內(nèi)部實現(xiàn)了一個迭代器ListIteratorlistIterator();返回一個List迭代器對象,AbstractList抽象類內(nèi)部實現(xiàn)了一個List迭代器booleanequals(Objecto);重寫Object的equals方法,內(nèi)部先判斷是否同一個對象,是返回true,否則判斷o是否是List對象,不是返回false,是的話迭代比較兩個集合中每一個元素是否一致,都一致返回trueinthashCode();內(nèi)部迭代集合中每一個元素計算出hashcode值ListsubList(intfromIndex,inttoIndex);得到List集合的子集合,內(nèi)部通過構造AbstractList內(nèi)部的SubList實現(xiàn)
ArrayList
ArrayList繼承自AbstractList實現(xiàn)了List中所有方法,該集合可以插入任何元素包括null元素。
ArrayList內(nèi)部使用數(shù)組保存元素,他的size、isEmpty、get、set、add等操作都是常數(shù)時間。在獲取元素時會比LinkedList更有優(yōu)勢。
Arraylist有一個初始的大小,該大小會隨著元素的增加而增長。
ArrayList不是線程安全的,在多線程環(huán)境下使用時需要注意,我們可以通過Collections.synchronizedList(newArrayList(…));操作得到一個線程安全的ArrayList
ArrayList中的迭代器在List集合結(jié)果變化后,我們調(diào)用迭代器中的方法時會快速拋出ConcurrentModificationException異常通知程序,以免造成損失。
ArrayList的擴展策略:
在初始集合為空時,加入元素時會初始化Math.max(DEFAULT_CAPACITY,minCapacity)個空間,即取插入元素個數(shù)和DEFAULT_CAPACITY中比較大的那個數(shù)
集合非空時插入元素,如果空間不夠時,則取原集合大小擴展2倍和最小需求大小中較大的那個進行擴展
ArrayList重寫了Iterator和ListIterator,內(nèi)部直接通過遍歷數(shù)組實現(xiàn)
ArrayList重寫了SubList類,該類直接通過訪問數(shù)組實現(xiàn)
ArrayList主要包括以下屬性:
transientObject[]elementData;該對象數(shù)組用于存放集合中的元素intsize;該屬性用于保存集合的大小transientintmodCount;記錄ArrayList修改的次數(shù),在集合迭代器中會使用該數(shù)字判斷迭代時集合是否修改過
ArrayList主要包含以下構造函數(shù):ArrayList(intinitialCapacity);構造初始大小為initialCapacity的集合對象ArrayList();構造一個空的數(shù)組元素ArrayList(Collection<?extendsE>c);使用傳入集合c構造一個集合對象
ArrayList主要包括以下函數(shù):
voidtrimToSize();將集合中數(shù)組大小恢復至當前集合大小,該操作可以壓縮集合使用空間voidensureCapacity(intminCapacity);通過傳入的minCapacity判斷集合是否需要擴展,需要的話則擴展數(shù)組大小,已足夠存放元素intindexOf(Objecto);得到指定元素第一次在集合中的位置,重寫了AbstractList類的方法,內(nèi)部直接遍歷元素數(shù)組實現(xiàn)intlastIndexOf(Objecto);同上Objectclone();重寫了clone方法,并且將元素數(shù)組復制一份出來,且將modCount致0,注意此處數(shù)組中元素并沒有clone,也就是說克隆后的集合和元集合使用同一份具體元素Object[]toArray();直接返回本集合中的數(shù)組Eget(intindex);直接訪問數(shù)組Eset(intindex,Eelement);直接設置數(shù)組元素值booleanadd(Ee);直接操作數(shù)組,想數(shù)組添加一個元素Eremove(intindex);直接操作數(shù)組booleanremove(Objecto);一樣遍歷數(shù)組,注意該操作會導致數(shù)組移動voidclear();遍歷將數(shù)組致空,同時設置size大小為0booleanaddAll(Collection<?extendsE>c);通過數(shù)組直接添加voidsort(Comparator<?superE>c);實現(xiàn)集合中元素排序功能,接收一個Comparator用以比較集合中元素的大小
Java技術內(nèi)容
Java中List集合:http://www.dabaquan.cn/tutorial_java_advance/637.html
以上就是動力節(jié)點java培訓機構的小編針對“Java編程中l(wèi)ist集合的詳解”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業(yè)
業(yè)余時間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習