您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Java集合框架由什么組成的”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Java集合框架由什么組成的”這篇文章吧。
第一部分 集合框架介紹
Java平臺提供了一個(gè)全新的集合框架?!凹峡蚣堋敝饕梢唤M用來操作對象的接口組成。不同接口描述一組不同數(shù)據(jù)類型。
2003-11-30926010.bmp" align=absMiddle border=0>
Java 2集合框架圖
集合接口:
6
個(gè)接口(短虛線表示),表示不同集合類型,是集合框架的基礎(chǔ)。
抽象類:5個(gè)抽象類(長虛線表示),對集合接口的部分實(shí)現(xiàn)。可擴(kuò)展為自定義集合類。
實(shí)現(xiàn)類:8個(gè)實(shí)現(xiàn)類(實(shí)線表示),對接口的具體實(shí)現(xiàn)。
在很大程度上,一旦您理解了接口,您就理解了框架。雖然您總要?jiǎng)?chuàng)建接口特定的實(shí)現(xiàn),但訪問實(shí)際集合的方法應(yīng)該限制在接口方法的使用上;因此,允許您更改基本的數(shù)據(jù)結(jié)構(gòu)而不必改變其它代碼。
· Collection
接口是一組允許重復(fù)的對象。
· Set
接口繼承 Collection
,但不允許重復(fù),使用自己內(nèi)部的一個(gè)排列機(jī)制。
· List
接口繼承 Collection
,允許重復(fù),以元素安插的次序來放置元素,不會重新排列。
· Map接口是一組成對的鍵-值對象,即所持有的是key-value pairs
。Map
中不能有重復(fù)的key
。擁有自己的內(nèi)部排列機(jī)制。
· 容器中的元素類型都為object。從容器取得元素時(shí),必須把它轉(zhuǎn)換成原來的類型。
Java 2簡化集合框架圖
第二部分 集合接口
1.Collection
接口
用于表示任何對象或元素組。想要盡可能以常規(guī)方式處理一組元素時(shí),就使用這一接口。
(1) 單元素添加、刪除操作:
boolean add(Object o)
:
將對象添加給集合
boolean remove(Object o)
:
如果集合中有與
o
相匹配的對象
,
則刪除對象
o
(2) 查詢操作:
int size()
:返回當(dāng)前集合中元素的數(shù)量
boolean isEmpty()
:判斷集合中是否有任何元素
boolean contains(Object o)
:查找集合中是否含有對象o
Iterator iterator()
:返回一個(gè)迭代器,用來訪問集合中的各個(gè)元素
(3) 組操作 :作用于元素組或整個(gè)集合
boolean containsAll(Collection c)
:
查找集合中是否含有集合c
中所有元素
boolean addAll(Collection c)
:
將集合
c
中所有元素添加給該集合
void clear():
刪除集合中所有元素
void removeAll(Collection c)
:
從集合中刪除集合
c
中的所有元素
void retainAll(Collection c)
:
從集合中刪除集合
c
中不包含的元素
(4) Collection
轉(zhuǎn)換為Object
數(shù)組 :
Object[] toArray()
:返回一個(gè)內(nèi)含集合所有元素的array
Object[] toArray(Object[] a)
:返回一個(gè)內(nèi)含集合所有元素的array
。
運(yùn)行期返
回的
array
和參數(shù)
a
的型別相同,需要轉(zhuǎn)換為正確型別。
此外,您還可以把集合轉(zhuǎn)換成其它任何其它的對象數(shù)組。但是,您不能直接把集合轉(zhuǎn)換成基本數(shù)據(jù)類型的數(shù)組,因?yàn)榧媳仨毘钟袑ο蟆?/p>
『斜體接口方法是可選的。因?yàn)橐粋€(gè)接口實(shí)現(xiàn)必須實(shí)現(xiàn)所有接口方法,調(diào)用程序就需要一種途徑來知道一個(gè)可選的方法是不是不受支持。如果調(diào)用一種可選方法時(shí),一個(gè) UnsupportedOperationException
被拋出,則操作失敗,因?yàn)榉椒ú皇苤С?。此異常類繼承 RuntimeException
類,避免了將所有集合操作放入 try-catch
塊?!?/p>
Collection不提供get()方法。如果要遍歷Collectin中的元素,就必須用Iterator。
1.1.AbstractCollection 抽象類
AbstractCollection
類提供具體“集合框架”類的基本功能。雖然您可以自行實(shí)現(xiàn) Collection
接口的所有方法,但是,除了iterator()
和size()
方法在恰當(dāng)?shù)淖宇愔袑?shí)現(xiàn)以外,其它所有方法都由 AbstractCollection
類來提供實(shí)現(xiàn)。如果子類不覆蓋某些方法,可選的如add()
之類的方法將拋出異常。
1.2.Iterator 接口
Collection
接口的iterator()
方法返回一個(gè) Iterator
。Iterator
接口方法能以迭代方式逐個(gè)訪問集合中各個(gè)元素,并安全的從Collection
中除去適當(dāng)?shù)脑亍?/p>
(1) boolean hasNext():
判斷是否存在另一個(gè)可訪問的元素
Object next():
返回要訪問的下一個(gè)元素。如果到達(dá)集合結(jié)尾,則拋出
NoSuchElementException
異常。
(2) void
remove():
刪除上次訪問返回的對象。本方法必須緊跟在一個(gè)元素的訪問后執(zhí)行。如果上次訪問后集合已被修改,方法將拋出
IllegalStateException
。
『Iterator中刪除操作對底層Collection也有影響?!?/p>
迭代器是 故障快速修復(fù)(fail-fast)的。這意味著,當(dāng)另一個(gè)線程修改底層集合的時(shí)候,如果您正在用 Iterator
遍歷集合,那么,Iterator
就會拋出 ConcurrentModificationException
(另一種 RuntimeException
異常
)異常并立刻失敗。
2.List接口
List
接口繼承了 Collection
接口以定義一個(gè)允許重復(fù)項(xiàng)的有序集合。該接口不但能夠?qū)α斜淼囊徊糠诌M(jìn)行處理,還添加了面向位置的操作。
(1) 面向位置的操作包括插入某個(gè)元素或 Collection
的功能,還包括獲取、除去或更改元素的功能。在 List
中搜索元素可以從列表的頭部或尾部開始,如果找到元素,還將報(bào)告元素所在的位置 :
void add(int index, Object element)
: 在指定位置index上添加元素element
boolean addAll(int index, Collection c)
: 將集合c
的所有元素添加到指定位置
index
Object get(int index)
: 返回List中指定位置的元素
int indexOf(Object o):
返回第一個(gè)出現(xiàn)元素
o
的位置,否則返回
-1
int lastIndexOf(Object o)
:返回最后一個(gè)出現(xiàn)元素o
的位置,否則返回
-1
Object remove(int index)
:刪除指定位置上的元素
Object set(int index, Object element)
:用元素element取代位置index上的元素,并且返回舊的元素
(2) List
接口不但以位置序列迭代的遍歷整個(gè)列表,還能處理集合的子集:
ListIterator listIterator()
: 返回一個(gè)列表迭代器,用來訪問列表中的元素
ListIterator listIterator(int index) :
返回一個(gè)列表迭代器,用來從指定位置
index
開始訪問列表中的元素
List subList(int fromIndex, int toIndex)
:返回從指定位置fromIndex(包含)到toIndex(不包含)范圍中各個(gè)元素的列表視圖
『對子列表的更改(如 add()
、remove()
和 set()
調(diào)用)對底層 List
也有影響。』
2.1.ListIterator接口
ListIterator
接口繼承 Iterator
接口以支持添加或更改底層集合中的元素,還支持雙向訪問。ListIterator
沒有當(dāng)前位置,光標(biāo)位于調(diào)用
previous
和
next
方法返回的值之間。一個(gè)長度為
n
的列表,有
n+1
個(gè)有效索引值:
(1) void add(Object o):
將對象
o
添加到當(dāng)前位置的前面
void set(Object o):
用對象
o
替代
next
或
previous
方法訪問的上一個(gè)元素。如果上次調(diào)用后列表結(jié)構(gòu)被修改了,那么將拋出
IllegalStateException
異常。
(2)
boolean hasPrevious():
判斷向后迭代時(shí)是否有元素可訪問
Object previous()
:返回上一個(gè)對象
int nextIndex():
返回下次調(diào)用
next
方法時(shí)將返回的元素的索引
int previousIndex():
返回下次調(diào)用
previous
方法時(shí)將返回的元素的索引
『正常情況下,不用
ListIterator
改變某次遍歷集合元素的方向 — 向前或者向后。雖然在技術(shù)上可以實(shí)現(xiàn),但previous()
后立刻調(diào)用next()
,返回的是同一個(gè)元素。把調(diào)用 next()和previous()的順序顛倒一下,結(jié)果相同。』
『我們還需要稍微再解釋一下
add()
操作。添加一個(gè)元素會導(dǎo)致新元素立刻被添加到隱式光標(biāo)的前面。因此,添加元素后調(diào)用 previous()
會返回新元素,而調(diào)用 next()
則不起作用,返回添加操作之前的下一個(gè)元素?!?/code>undefined
以上是“Java集合框架由什么組成的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。