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