版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、集合(Collection)
Collection
I-List|-Set
|-ArrayList|-HashSet
|-Vector|-TreeSet
|-LinkedList
1、Collection
(1)集合的由來(lái)?
我們學(xué)習(xí)的是Java-面向?qū)ο?操作很多對(duì)象-存儲(chǔ)-
容器(數(shù)組和StringBuffer)-數(shù)組
而數(shù)組的長(zhǎng)度固定,所以不適合做變化的需求,Java就提供了集合供我們使用。
(2)集合和數(shù)組的區(qū)別?
A:長(zhǎng)度區(qū)別
數(shù)組固定
集合可變
B:內(nèi)容區(qū)別
數(shù)組可以是基本類型,也可以是引用類型
集合只能是引用類型
C:元素內(nèi)容
數(shù)組只能存儲(chǔ)同一種類型
集合可以存儲(chǔ)不同類型(其實(shí)集合一?般存儲(chǔ)的也是同一種類型)
(3)集合的繼承體系結(jié)構(gòu)?
由于需求不同,Java就提供了不同的集合類。這多個(gè)集合類的數(shù)據(jù)結(jié)構(gòu)不同,但是它們都是要提供存儲(chǔ)和
遍歷功能的,
我們把它們的共性不斷的向上提取,最終就形成了集合的繼承體系結(jié)構(gòu)圖。
(4)Collection的功能:集合的頂層接口,它的子體系有重復(fù)的,有唯一的,有有序的,有無(wú)序的。
1:添加功能
booleanadd(Objectobj):添加一個(gè)元素
booleanaddAII(Collectionc):添加一個(gè)集合的元素
2:刪除功能
voidclear。:移除所有元素
booleanremove(Objecto):移除一個(gè)元素
booleanremoveAII(Collection-個(gè)集合的元素(是個(gè)還是所有)
3:判斷功能
booleancontains(Objecto):判斷集合中是否包含指定的元素
booleancontainsAll(Collectionc):判斷集合中是否包含指定的集合元素(是一個(gè)還是所有)
booleanisEmpty():判I斯集合是否為空
4:獲取功能
lterator<E>iterator()(重點(diǎn))
5:長(zhǎng)度功能
intsize。:元素的個(gè)數(shù)
6:交集功能
booleanretainAII(Collectgnc):兩個(gè)集合都有的元素?思考元素去哪了,返回的boolean乂是什么意
思呢?
7:把集合轉(zhuǎn)換為數(shù)組
Object[]toArray()(5)Collection集合的遍歷
A:把集合轉(zhuǎn)數(shù)組(了解)
B:迭代器(集合專用方式)
⑸迭代器:Iterator集合的專用遍歷方式
Objectnext():獲取元素,并移動(dòng)到下一個(gè)位置。
booleanhasNext():如果仍有元素可以迭代,則返回true。
A:是集合的獲取元素的方式。
B:是依賴于集合而存在的。
C:迭代器的原理和源碼。
a:為什么定義為了一個(gè)接口而不是實(shí)現(xiàn)類?
b:看了看迭代器的內(nèi)部類實(shí)現(xiàn)。
(6)Collection集合的案例(遍歷方式迭代器)
集合的操作步驟:
A:創(chuàng)建集合對(duì)象
B:創(chuàng)建元素對(duì)象
C:把元素添加到集合
D:遍歷集合
A:存儲(chǔ)字符串并遍歷
importjava.util.Collection;
importjava.util.ArrayList;
importjava.util.Iterator;
publicclassCollectionDemo{
publicstaticvoidmain(String[]args){
〃創(chuàng)建集合對(duì)象
Collectionc=newArrayListf);
〃創(chuàng)建并添加元素
c.add("hello");
c.add("world");
c.add("java");
〃遍歷集合
Iteratorit=c.iteratorf);
while(it.hasNext()){
Strings=(String)it.next();
System.out.println(s);
2、List集合
1、List
(l)List是Collection的子接口
特點(diǎn):有序(存儲(chǔ)順序和取出順序一致),可重復(fù)。
(2兒ist的特有功能:
A:添加功能
voidadd(intindex,Objectelement):在指定位置添加元素
B:獲取功能
Objectget(intindex):獲取指定位置的元素
C:列表迭代器
Listiteratorlistlterator():List集合特有的迭代器
D:刪除功能
Objectremove(intindex):根據(jù)索引刪除元素,返回被刪除的元素
E:修改功能
Objectset(intindex,Objectelement):根據(jù)索引修改元素,返回被修飾的元素
(3)Lst集合的特有遍歷功能
A:由size。和get()結(jié)合。
B:代碼演示
〃創(chuàng)建集合對(duì)象
Listlist=newArrayList();
〃創(chuàng)建并添加元素
list.add("hello");
list.addf'world");
list.add("java");
〃遍歷集合
Iteratorit=list.iterator();
while(it.hasNext()){
Strings=(String)it.next();
System.out.println(s);
)
Sy<;tpm.nutprintln('----------");
for(intx=0;x<list.size();x++){
Strings=(String)list.get(x);
System.out.println(s);
)
(4)列表迭代器:Listiteratorlistlterator():List集合特有的迭代器
該迭代器繼承了Iterator■迭代器,所以,就可以直接使用hasNext。和next()方法。
特有功能:
Objectprevious。:獲取上一個(gè)元素
booleanhasPrevious。:判斷是否有元素
注?。簎stlterator可以實(shí)現(xiàn)逆向遍歷,但是必須先正向遍歷,才能逆向遍歷,所以一般無(wú)意義,不使用,
(5)列表迭代器的特有功能;(了解)
可以逆向遍歷,但是要先正向遍歷,所以無(wú)意義,基本不使用。
(6)并發(fā)修改異常
A:出現(xiàn)的現(xiàn)象
迭代器遍歷集合,集合修改集合元素
B:原因
迭代器是依賴于集合的,而集合的改變迭代器并不知道。
C:解決方案
a:迭代器遍歷,迭代器修改(Listiterator)
元素添加在剛才迭代的位置
b:集合遍歷,集合修改(size。和get())
元素添加在集合的末尾
2、ArrayList
A:沒(méi)有特有功能需要學(xué)習(xí)
B:案例
a:ArrayList存儲(chǔ)字符串并遍歷
b:ArrayList存儲(chǔ)自定義對(duì)象并遍歷
3、Vector
A:有特有功能
a:添加
publicvoidaddElement(Eobj)add()
b:獲取
publicEelementAt(intindex)get()
publicEnumeration<E>elements()—iterator()
B:案例
a'ectoi■存儲(chǔ)字符串并遍歷
b:Vector存儲(chǔ)自定義對(duì)象并遍歷
4、LinkedList
A:有特有功能
a:添加
addFirst()
addLast()
b刪除
removeFirst()
removeLast()
c:獲取
getFirst()
getLast()
B:案例
a:LinkedList存儲(chǔ)字符串并遍歷
b:LinkedList存儲(chǔ)自定義對(duì)象并遍歷
3、Set集合
Set
⑴Set集合的特點(diǎn):無(wú)序,唯一
2、HashSet
(1)、HashSet:它不保證set的迭代順序:特別是它不保證該順序恒久不變。
注意:雖然Set集合的元素?zé)o序,但是,作為集合來(lái)說(shuō),它肯定有它自己的存儲(chǔ)順序,而你的順序恰好和它的
存儲(chǔ)順序?致,這代表不了有序,你可以多存儲(chǔ)?些數(shù)據(jù),就能看到效果。
A:底層數(shù)據(jù)結(jié)構(gòu)是哈希表(是一個(gè)元素為鏈表的數(shù)組)
B:哈希表底層依賴兩個(gè)方法:hashCode。和equals()
執(zhí)行順序:
首先比較哈希值是否相同
相同:繼續(xù)執(zhí)行equals。方法
返回true:元素重復(fù)了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合
C:如何保證元素唯一性的呢?
由hashCode。和equals。保iE的
D:開(kāi)發(fā)的時(shí)候,代碼非常的簡(jiǎn)單,自動(dòng)生成即可。
E:HashSet存儲(chǔ)字符串并遍歷
F:HashSet存儲(chǔ)自定義對(duì)象并遍歷(對(duì)象的成員變量值相同即為同一個(gè)元素)
(2)、LinkedHashSet:底層數(shù)據(jù)結(jié)構(gòu)由哈希表和徒表組成。
哈希表保證元素的唯一性。
鏈表保證元素有素。(存儲(chǔ)和取出是?致)
3、TreeSet
(1)TreeSet:
A:底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(shù)(是一個(gè)自平衡的二叉樹(shù))
B:保證元素的排序方式
a:自然排序(元素具備比較性)
讓元素所屬的類實(shí)現(xiàn)Comparable接口
b:比較器排序(集合具備比較性)
讓集合構(gòu)造方法接收Comparator的實(shí)現(xiàn)類對(duì)象
C;把我們講過(guò)的代碼看遍即可
(2)案例:
A:獲取無(wú)重復(fù)的隨機(jī)數(shù)
B:鍵盤錄入學(xué)生按照總分從高到底輸出
4、Collection集合總結(jié)
1、Collection
|-List有序(存儲(chǔ)順序和取出順序一?致),可重復(fù)
|-ArrayList
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
線程不安全,效率高
|-Vector
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
線程安全,效率低
|-LinkedList
底層數(shù)據(jù)結(jié)構(gòu)是鏈表,件詢慢,增刪快。
線程不安全,效率高
|-Set無(wú)序(存儲(chǔ)順序和取出RI頁(yè)序不一致),唯一
|-HashSet
底層數(shù)據(jù)結(jié)構(gòu)是哈希表。
如何保證元素唯一性的呢?
依賴兩個(gè)方法:hashCode。和equals()
開(kāi)發(fā)中自動(dòng)生成這兩個(gè)方法即可
|-LinkedHashSet
底層數(shù)據(jù)結(jié)構(gòu)是鏈表和哈希表
由鏈表保證元素有序
由哈希表保證元素唯一
|-TreeSet
底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(shù)。
如何保證元素排序的呢?
自然排序
比較器排序
如何保證元素唯一性的呢?
根據(jù)比較的返回值是否是0來(lái)決定
2、Collation集合的使用
唯一嗎?
是:Set
排序嗎?
是:TreeSet
否:HashSet
如果你知道是Set,但是不知道是哪個(gè)Set,就用HashSet<,
否:List
要安全嗎?
是:Vector
否:ArrayList或者LinkedList
查詢多:ArrayList
增刪多:LinkedList
如果你知道是List,但是不知道是哪個(gè)List,就用ArrayListo
如果你知道是Collection集合,但是不知道使用誰(shuí),就用ArrayList。
如果你知道用集合,就用ArrayListo
3、在集合中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)
ArrayXxx:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增冊(cè)[慢
LinkedXxx:底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快
HashXxx:底層數(shù)據(jù)結(jié)構(gòu)是哈希表。依賴兩個(gè)方法:hashCode()fllequalsl)
TreeXxx:底層數(shù)據(jù)結(jié)構(gòu)是二叉樹(shù)。兩種方式排序:自然排序和比較器排序
4、常見(jiàn)數(shù)據(jù)結(jié)構(gòu)
A:棧先進(jìn)后出
B:隊(duì)列先進(jìn)先出
C:數(shù)組查詢快,增刪慢
D:鏈表查詢慢,增刪快
5、Collections
1、Collections
(1)是針對(duì)集合進(jìn)行操作的工具類
(2)面試題:Collection-fllCollections的區(qū)別
A:Collection是單列集合的頂層接口,有兩個(gè)子接口List和Set
B:Collections是針對(duì)集合進(jìn)行操作的工具類,可以對(duì)集合進(jìn)行排序和查找等
(3)常見(jiàn)的幾個(gè)小方法:
A:publicstatic<T>voidsort(List<T>list)
B:publicstatic<T>intbinarySearch(List<?>list,Tkey)
C:publicstatic<T>Tmax(Collection<?>coll)
D:publicstaticvoidreverse(List<?>list)
E:publicstaticvoidshuffle(List<?>list)
(4)案例
A:ArrayList集合存儲(chǔ)自定義對(duì)象的排序
B:模擬斗地主洗牌和發(fā)牌
C:模擬斗地主洗牌和發(fā)牌并對(duì)牌進(jìn)行排序
6、Map
⑴將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。
(2)Map和Collection的區(qū)別?
A:M叩存儲(chǔ)的是鍵值對(duì)形式的元素,鍵唯一,值可以重復(fù)。夫妻對(duì)
B:Collection存儲(chǔ)的是單獨(dú)出現(xiàn)的元素,子接口Set元素唯一,子接口List元素可重復(fù)。光棍
(3)Map接口功能概述
A:添加功能
Vput(Kkey,Vvalue):添加元素。這個(gè)其實(shí)還有另一個(gè)功能?先不告訴你,等會(huì)講
如果鍵是第一次存儲(chǔ),就直接存儲(chǔ)元素,返回null
如果鍵不是第?次存在,就用值把以前的值替換掉,返回以前的值
B:刪除功能
voidclear。:移除所有的鍵值對(duì)元素
Vremove(Objectkey):根據(jù)混刪除鍵值對(duì)元素,并把值返回
C:判斷功能
booleancontainsKey(Objectkey):判斷集合是否包含指定的鍵
booleancontainsValue(Objectvalue):判斷集合是否包含指定的值
booleanisEmpty():判斷集合是否為空
D:獲取功能
Set<Map.Entry<K,V?entrySet():???
Vget(Objectkey):根據(jù)鍵獲取值
Set<K>keyset。:獲取集合中所有鍵的集合
Collection<V>values。:獲取集合中所有值的集合
E:長(zhǎng)度功能
intsize():返【可集合中的鍵值對(duì)的對(duì)數(shù)
(4)Map集合的遍歷
A:鍵找值
a:獲取所有鍵的集合
b:遍歷鍵的集合,得到每一個(gè)鍵
c:根據(jù)鍵到集合中去找值
B:鍵值對(duì)對(duì)象找鍵和值
a:獲取所有的鍵值對(duì)對(duì)象的集合
b:遍歷鍵值對(duì)對(duì)象的集合,獲取每一個(gè)鍵值對(duì)對(duì)象
c:根據(jù)鍵值對(duì)對(duì)象去獲取鍵和值
代碼體現(xiàn):
Map<String,String>hm=newHashMap<String,String>();
hm.put("it002"/"hello");
,,
hm.put(it003","world");
,,,,
lll^.pul("ilOOl/"jdVd);
〃方式1鍵找值
Set<String>set=hm.keySet();
forfStringkey:set){
Stringvalue=hm.get(key);
System.out.println(key+"—"+value);
)
〃方式2健值對(duì)對(duì)象找鍵和值
Set<Map.Entry<String,String?set2=hm.entrySet();
for(Map.Entry<String,String>me:set2){
Stringkey=me.getKeyO;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026徽商集團(tuán)招聘1人考試參考題庫(kù)及答案解析
- 2026廣西壯族自治區(qū)人民醫(yī)院防城港醫(yī)院防城港市第一人民醫(yī)院補(bǔ)充招聘食堂面點(diǎn)師2人考試參考題庫(kù)及答案解析
- 2026渤海銀行南京分行招聘考試備考試題及答案解析
- 2026中國(guó)科學(xué)院地球環(huán)境研究所特別研究助理(博士后)人才招聘考試備考題庫(kù)及答案解析
- 2026中石安環(huán)公司寒假實(shí)習(xí)生招募考試參考試題及答案解析
- 2026江蘇鹽城市阜寧縣科技成果轉(zhuǎn)化服務(wù)中心選調(diào)10人考試參考題庫(kù)及答案解析
- 2026年臨滄市住房和城鄉(xiāng)建設(shè)局招聘公益性崗位工作人員(4人)考試參考試題及答案解析
- 2026吉安井岡農(nóng)業(yè)生物科技有限公司招聘見(jiàn)習(xí)1人筆試備考題庫(kù)及答案解析
- 2026四川成都市西南石油大學(xué)校醫(yī)院(成都校區(qū))招聘2人考試參考題庫(kù)及答案解析
- 2026安徽消防中控員考試參考題庫(kù)及答案解析
- 2026年四川單招單招考前沖刺測(cè)試題卷及答案
- 2026年全國(guó)公務(wù)員考試行測(cè)真題解析及答案
- (2025)70周歲以上老年人換長(zhǎng)久駕照三力測(cè)試題庫(kù)(附答案)
- 2026年泌尿護(hù)理知識(shí)培訓(xùn)課件
- 昆山鈔票紙業(yè)有限公司2026年度招聘?jìng)淇碱}庫(kù)附答案詳解
- GB/T 46793.1-2025突發(fā)事件應(yīng)急預(yù)案編制導(dǎo)則第1部分:通則
- 2026元旦主題班會(huì):馬年猜猜樂(lè)馬年成語(yǔ)教學(xué)課件
- 2025年中國(guó)工藝美術(shù)館面向社會(huì)招聘工作人員2人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- JJF 1147-2006消聲室和半消聲室聲學(xué)特性校準(zhǔn)規(guī)范
- GB/T 3630-2006鈮板材、帶材和箔材
- GB/T 2951.11-2008電纜和光纜絕緣和護(hù)套材料通用試驗(yàn)方法第11部分:通用試驗(yàn)方法-厚度和外形尺寸測(cè)量-機(jī)械性能試驗(yàn)
評(píng)論
0/150
提交評(píng)論