java集合解析課件_第1頁(yè)
java集合解析課件_第2頁(yè)
java集合解析課件_第3頁(yè)
java集合解析課件_第4頁(yè)
java集合解析課件_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論