Java
平臺(tái)提供了一個(gè)全新的集合框架。“集合框架”主要由一組用來操作對象的接口組成。不同接口描述一組不同數(shù)據(jù)類型。
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ù),以元素安插的次序來放置元素,不會(huì)重新排列。
· 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)榧媳仨毘钟袑ο蟆?
“斜體接口方法是可選的。因?yàn)橐粋€(gè)接口實(shí)現(xiàn)必須實(shí)現(xiàn)所有接口方法,調(diào)用程序就需要一種途徑來知道一個(gè)可選的方法是不是不受支持。如果調(diào)用一種可選方法時(shí),一個(gè) UnsupportedOperationException 被拋出,則操作失敗,因?yàn)榉椒ú皇苤С帧4水惓n惱^承 RuntimeException 類,避免了將所有集合操作放入 try-catch 塊。”
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ù)脑亍?
(1) boolean hasNext(): 判斷是否存在另一個(gè)可訪問的元素
Object next(): 返回要訪問的下一個(gè)元素。如果到達(dá)集合結(jié)尾,則拋出NoSuchElementException異常。
(2) void remove(): 刪除上次訪問返回的對象。本方法必須緊跟在一個(gè)元素的訪問后執(zhí)行。如果上次訪問后集合已被修改,方法將拋出IllegalStateException。
“Iterator中刪除操作對底層Collection也有影響。”
迭代器是 故障快速修復(fù)(fail-fast)的。這意味著,當(dāng)另一個(gè)線程修改底層集合的時(shí)候,如果您正在用 Iterator 遍歷集合,那么,Iterator就會(huì)拋出 ConcurrentModificationException (另一種 RuntimeException異常)異常并立刻失敗。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
