91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java集合中list的示例分析

發布時間:2021-08-17 10:40:08 來源:億速云 閱讀:159 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java集合中list的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java集合中list的示例分析”這篇文章吧。

1、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

2、List子類

2.1、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實現

2.2、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用以比較集合中元素的大小

2.3、AbstractSequentialList抽象類

AbstractSequentialList是一個抽象類,繼承自AbstractList抽象類

AbstractSequentialList內部基于鏈表實現,主要針對順序訪問list集合的情況,它在隨機訪問時表現較差

AbstractSequentialList的實現者需要提供listIterator和size兩個實現,AbstractSequentialList內部本身通過listIterator實現了其他函數

ArrayList主要包含以下函數:

Eget(intindex);獲取第index個元素,內部通過ListIterator實現Eset(intindex,Eelement);替換集合的第index個元素,內部通過ListIterator實現voidadd(intindex,Eelement);想list集合中插入元素,內部通過voidadd(intindex,Eelement)實現Eremove(intindex);刪除list中第index個元素,內部通過ListIterator實現booleanaddAll(intindex,Collection<?extendsE>c);添加另一個集合中的所元素,內部通過ListIterator實現Iteratoriterator();直接調用listIterator()方法

2.4、LinkedList

LinkedList繼承自AbstractSequentialList抽象類,實現了List、Deque、Cloneable、和Serializable接口

LinkedList內部基于雙向鏈表實現,允許插入任何元素,包括null

LinkedList不是線程安全的,在多線程環境下使用時需要注意,我們可以通過Collections.synchronizedList(newLinledList(…));操作得到一個線程安全的ArrayList

LinkedList中的迭代器在List集合結果變化后,我們調用迭代器中的方法時會快速拋出ConcurrentModificationException異常通知程序,以免造成損失。

LinkedList內部使用Node類存儲元素,該類包含下面三個屬性,

Eitem;保存元素值得對象

Nodenext;下一個節點對象

Nodeprev;上一個節點對象

LinkedList重寫了ListIterator,內部直接通過遍歷鏈表實現迭代器功能

LinkedList主要包含以下屬性

transientintsize=0;集合當前大小transientNodefirst;鏈表的首元素transientNodelast;鏈表的尾元素

LinkedListList主要包含以下構造函數:LinkedList();空構造函數LinkedList(Collection<?extendsE>c);使用另外一個集合的構造函數,會將另一個集合所有元素加入本集合中

LinkedList主要包含以下函數:

自有函數

voidlinkFirst(Ee);插入元素至第一個位置voidlinkLast(Ee);插入元素至最后一個位置voidlinkBefore(Ee,Nodesucc);在某個元素之前插入一個元素EunlinkFirst(Nodef);移除第一個元素EunlinkLast(Nodel);移除最后一個元素Eunlink(Nodex);移除指定元素EgetFirst();得到第一個元素EgetLast();得到最后一個元素EremoveFirst();移除第一個元素EremoveLast();移除最后一個元素voidaddFirst(Ee);插入第一個元素voidaddLast(Ee);插入最后一個元素Nodenode(intindex);返回index對應的Node節點

List函數

booleancontains(Objecto);是否包含某個元素intsize();返回集合大小,直接返回size變量booleanadd(Ee);添加一個元素,調用linkLast(e);booleanremove(Objecto);刪除指定元素,通過遍歷鏈表刪除booleanaddAll(Collection<?extendsE>c);將集合c插入至本集合,鏈表插入voidclear();遍歷鏈表,清空所有元素,將首尾元素制空Eget(intindex);獲取第index個元素,通過node(index)得到node節點Eset(intindex,Eelement);替換第index個元素,通過node(index)得到node節點,然后設置值voidadd(intindex,Eelement);在第index位置插入元素,調用linkBefore(element,node(index));Eremove(intindex);刪除第index個元素,通過unlink(node(index));實現intindexOf(Objecto);得到o對象在集合中的位置(第一次出現),通過遍歷鏈表實現,從頭部開始遍歷intlastIndexOf(Objecto)得到o對象在集合中的位置(最后一次出現),通過遍歷鏈表實現,從尾部開始遍歷

Deque函數Epeek();返回第一個元素,但不刪除。直接去first首元素,集合空時,返回nullEelement();返回第一個元素,但不刪除。集合空時拋出異常,調用getFirst();Eremove();獲得并移除隊列頂部元素,如果隊列為空拋出異常,調用removeFirstEpoll();獲得并移除隊列頂部元素,如果隊列為空返回null調用unlinkFirst(f)booleanoffer(Ee);隊列尾部插入元素,調用add(e)booleanofferFirst(Ee);隊列首部插入元素,調用addFirst(e);booleanofferLast(Ee);隊列尾部插入元素,調用addLast(e)EpeekFirst();返回首元素EpeekLast();返回最后一個元素,不刪除,空時返回nullEpollFirst();獲得并移除隊列頂部元素,如果隊列為空返回null調用unlinkFirst(f)EpollLast();獲得并移除隊列尾部元素,如果隊列為空返回null調用unlinkLast(f)voidpush(Ee);向首部插入元素,調用addFirst(e);,棧方法Epop();返回并移除首元素,調用removeFirst();,棧方法booleanremoveFirstOccurrence(Objecto);刪除第一次出現o的元素,調用remove(o);函數booleanremoveLastOccurrence(Objecto);刪除最后一次出現o的元素,從后向前遍歷鏈表,匹配后移除

2.5、Vector

功能和ArrayList類似,不同的是Vector是線程安全的,其大部分方法都加了synchronized關鍵字以保證多線程環境下線程安全問題。不過在可以確保沒有線程安全問題的情況下,我們還是應該選擇ArrayList,因為ArrayList的效率要比Vector高。

2.6、CopyOnWriteArrayList

CopyOnWriteArrayList繼承Object,實現了List,RandomAccess,Cloneable,java.io.Serializable接口

CopyOnWriteArrayList是

CopyOnWriteArrayList內部使用數組保存元素,但是它的數組大小等于集合的大小,因為它的增加、刪除、修改元素都是新copy一份數組

CopyOnWriteArrayList是線程安全的,他的寫操作加鎖,讀操作沒有加鎖,適用于讀多寫少的情況

CopyOnWriteArrayList實現了Iterator和ListIterator,內部通過遍歷數組實現,但是它的迭代器不支持操作元素。會拋出UnsupportedOperationException

CopyOnWriteArrayList主要包含以下屬性:

finaltransientReentrantLocklock;CopyOnWriteArrayList內部使用的線程同步鎖transientvolatileObject[]array;集合內部用于保存元素的地方

CopyOnWriteArrayList主要包含以下構造函數:

CopyOnWriteArrayList();構造一個空的集合CopyOnWriteArrayList(Collection<?extendsE>c);創建一個包括闖入集合所有元素的集合CopyOnWriteArrayList(E[]toCopyIn);創建一個包含傳入數組所有元素的集合,注:此處會copy原有數組。

CopyOnWriteArrayList主要包括以下函數:

finalObject[]getArray();得到集合持有的數組對象voidsetArray(Object[]a);設置集合的數組對象intsize();返回集合大小,直接返回數組的長度booleanisEmpty();判斷集合是否為空booleancontains(Objecto);判斷集合是否包含某元素intindexOf(Objecto);得到傳入元素在集合中第一次出現的位置索引intindexOf(Ee,intindex);得到傳入元素在集合中第一次出現的位置索引,從index開始查找intlastIndexOf(Objecto);得到傳入元素在集合中最后一次出現的位置索引,從集合尾部開始查找lastIndexOf(Ee,intindex);得到傳入元素在集合中出現的位置索引,從集合index開始往前查找Objectclone();返回集合的clone,集合的元素沒有被cloneObject[]toArray();轉換成數組,此處返回的是數組的copyT[]toArray(Ta[]);轉換成數組,如果傳入數組小于當前集合,重新申請一塊空間,否則使用數組a,當數組a大于集合長度時將數組a的臨近集合元素的第一個元素設置成null,可以方便用戶在知道集合不含null元素時判斷集合的大小Eget(intindex);獲取集合的index索引元素Eset(intindex,Eelement);設置集合的index元素的值booleanadd(Ee);往集合中添加元素voidadd(intindex,Eelement);插入元素至指定位置Eremove(intindex);移除指定位置的元素booleanremove(Objecto);移除第一次出現元素ovoidremoveRange(intfromIndex,inttoIndex);移除范圍內的所有元素booleanaddIfAbsent(Ee);當集合中不包含該元素時,添加該元素booleanaddIfAbsent(Ee,Object[]snapshot);當集合中不包含該元素且傳入數組中也不包含該元素時,添加該元素booleancontainsAll(Collection<?>c);判斷集合是否全部包含傳入集合的元素booleanremoveAll(Collection<?>c);移除集合中c中所有元素booleanretainAll(Collection<?>c);移除集合中所有不在c中的元素intaddAllAbsent(Collection<?extendsE>c);遍歷c,當c中元素不在集合中時,加入至集合voidclear();清空集合booleanaddAll(Collection<?extendsE>c);將集合c中所有元素加入至集合中booleanaddAll(intindex,Collection<?extendsE>c);將集合c中所有元素插入至index后

2.7、Stack

Stack繼承自Vector,他表示一種后進先出的數據結構,即棧。他擁有五種基本的操作即push、pop、peek、empty、search

Stack繼承自Vector,所以它也是線程安全的

Stack繼承自Vector,所以它內部也是用數組存儲元素的

Stack自定義函數如下

Epush(Eitem);向棧頂添加一個元素Epop();從棧頂取出并刪除一個元素Epeek();得到棧頂元素booleanempty();判斷棧是否為空intsearch(Objecto);查找o的位置,存在返回距棧頂位置,否則返回-1

以上是“java集合中list的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖口县| 通江县| 宽城| 金溪县| 射阳县| 赤峰市| 任丘市| 阆中市| 宜黄县| 商南县| 金门县| 通化市| 麻栗坡县| 牡丹江市| 错那县| 万全县| 景德镇市| 德江县| 宁强县| 泉州市| 鹤峰县| 织金县| 呼和浩特市| 汪清县| 文成县| 娱乐| 西吉县| 勐海县| 江津市| 乐山市| 铁力市| 边坝县| 吉首市| 霍州市| 渭南市| 孝昌县| 乌鲁木齐县| 九龙城区| 桃园市| 景谷| 安仁县|