版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第七章 集合案例 71 Collection 接口對(duì)集合得操作一、案例描述1、考核知識(shí)點(diǎn) 編號(hào) : 名稱 :Collection 接口2、練習(xí)目標(biāo)? 掌握 Collection 接口中方法得使用3、需求分析Collection 就是所有單列集合得父接口 ,在Collection 中定義了單列集合 (List 與Set)通用得一些 方法。為了讓初學(xué)者熟悉 Collection 接口中得常用方法 ,本案例將演示 Collection 接口中得方法對(duì) 集合進(jìn)行操作來(lái)學(xué)習(xí)方法得使用。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example012) 在類中定義兩個(gè) Collection 集合 ,并向其
2、中一個(gè)集合中添加數(shù)據(jù)3) 用 Collection 接口中得方法對(duì)定義得兩個(gè)集合進(jìn)行各種操作、案例實(shí)現(xiàn)import java、util 、 *;public class Example01 public static void main(String args) / 定義集合Collection col1 = new ArrayList;col1 、 add("123abc");col1 、 add(123);col1 、 add(34 、 121);Collection col2 = new ArrayList;/ 判斷集合就是否為空 boolean a = col1、
3、isEmpty;boolean b = col2、 isEmpty;"col1 集合就是否為空 :"+a);"col2 集合就是否為空 :"+b);/ 將集合 col1 中得元素添加到 col2 中col2 、 addAll(col1);"col1 集合中得元素添加到 col2 后,col2 集合 :"+col2);/ 獲取兩個(gè)集合得交集boolean c = col1、 retainAll(col2);"col1 與 col2 集合就是否有交集 :"+c);/ 清除集合 col2 中得元素col2 、 clear
4、;" 清除集合 col2 中得元素后 ,col2 集合 :"+col2);/ 獲取集合中元素得個(gè)數(shù)int size = col1、 size;"col1 集合中元素得個(gè)數(shù) :"+size);運(yùn)行結(jié)果如圖 71 所示。圖 7-1 運(yùn)行結(jié)果三、案例總結(jié)1、Collection 就是所有單列集合得父接口 ,因此在 Collection 中定義了單列集合 (List 與 Set)通用得一些方法 ,這些方法可用于操作所有得單列集合 ,如表 71 所示。 表 71 Collection 中得方法方法聲明功能描述boolean add(Object o)向集合中添加一
5、個(gè)元素boolean addAll(Collection c)將指定 Collection 中得所有元素添加到該集合中void clear刪除該集合中得所有元素boolean remove(Object o)刪除該集合中指定得元素boolean removeAll(Collection c)刪除指定集合中得所有元素boolean isEmpty判斷該集合就是否為空boolean contains(Object o)判斷該集合中就是否包含某個(gè)元素boolean containsAll(Collection c)判斷該集合中就是否包含指定集合中得所有元素Iterator iterator返回在該集
6、合得元素上進(jìn)行迭代得迭代器 (Iterator), 用于遍歷該 集合所有元素int size獲取該集合元素個(gè)數(shù)2、在編譯案例時(shí) ,會(huì)得到如圖 72 所示得警告 ,意思就是說(shuō)在使用 ArrayList 集合時(shí)并沒(méi)有顯示得指定集 合中存儲(chǔ)什么類型得元素 ,會(huì)產(chǎn)生安全隱患 ,這涉及到泛型安全機(jī)制得問(wèn)題。此警告對(duì)程序輸出結(jié)果沒(méi)有影 響。圖 7-2 編譯警告3、在編寫程序時(shí) ,不要忘記使用 import java 、 util 、 *;語(yǔ)句導(dǎo)包 ,否則程序?qū)?huì)編譯失敗 ,顯示類找不到。案例 72 List 接口得特有方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱:List 接口2、練習(xí)目標(biāo)? 掌握 List
7、 接口得常用方法得使用3、需求分析List 作為 Collection 集合得子接口 ,不但繼承了 Collection 接口中得全部方法 ,而且還增加了一 些根據(jù)元素索引來(lái)操作集合得特有方法。 為了熟悉 List 接口中特有方法得使用 ,本案例將演示使用 List 接口中得方法對(duì) List 集合進(jìn)行添加、修改等操作。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example022) 在類中定義兩個(gè) list 集合 ,并向其中一個(gè)集合中添加數(shù)據(jù)。3) 用 subList(int fromIndex, int toIndex) 方法獲取集合得一部分4) 用 set(int index, E el
8、ement) 方法修改一個(gè)元素5) 用 add(int index, E element) 方法增加一個(gè)元素、案例實(shí)現(xiàn)import java、util 、 *;public class Example02public static void main(String args) List list = new ArrayList;list 、 add("abc1"); /add 方法添加元素list 、 add("abc2");list 、 add("abc3");list 、 add("abc4");List ne
9、wList = list、 subList(0, 2);/subList方法獲取集合得前兩個(gè)元素Object o = list、 set(0, "haha");/set方法修改指定位置元素值為 hahalist 、add(0, "QQ");/add方法在集合指定位置增加一個(gè)元素 QQ 運(yùn)行結(jié)果如圖 73 所示。圖 7-3 運(yùn)行結(jié)果三、案例總結(jié)1、在 List 集合中允許出現(xiàn)重復(fù)得元素 ,所有得元素就是以一種線性方式進(jìn)行存儲(chǔ)得,在程序中可以通過(guò)索引來(lái)訪問(wèn)集合中得指定元素。 另外,List 集合還有一個(gè)特點(diǎn)就就是元素有序,即元素得存入順序與取出順序一致。2、
10、List 作為 Collection 集合得子接口 ,不但繼承了 Collection 接口中得全部方法 ,而且還增加了一些根據(jù) 元素索引來(lái)操作集合得特有方法 ,如表 72 所示。表 72 List 接口中得常見方法方法聲明功能描述void add(int index,Object element)將元素 element 插入在 List 集合得 index 處boolean addAll(int index,Collection c)將集合 c 所包含得所有元素插入到 List 集合得 index 處Object get(int index)返回集合索引 index 處得元素Object r
11、emove(int index)刪除 index 索引處得元素Object set(int index, Object element)將索引 index 處元素替換成 element對(duì)象 ,并將替換后得元素返回int indexOf(Object o)返回對(duì)象 o在List 集合中出現(xiàn)得位置索引int lastIndexOf(Object o)返回對(duì)象 o在List 集合中最后一次出現(xiàn)得位置索引List subList(int fromIndex, int toIndex)返回從索引 fromIndex( 包括 ) 到 toIndex( 不包括 )處所有元素集 合組成得子集合案例 73 Ar
12、rayList 集合得存取一、案例描述1、考核知識(shí)點(diǎn) 編號(hào) : 名稱 :ArrayList 集合2、練習(xí)目標(biāo)? 了解 ArrayList 集合得特點(diǎn)? 掌握對(duì) ArrayList 集合中元素得存取操作3、需求分析ArrayList 就是 List 接口得一個(gè)實(shí)現(xiàn)類 ,ArrayList 集合中大部分方法都就是從父類 Collection 與 List 繼承過(guò)來(lái)得。為了熟悉 ArrayList 集合得使用 ,本案例將演示 ArrayList 集合得定義、存儲(chǔ)元素 與取出元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example032) 在類中定義一個(gè) ArrayList 集合3) 用 ad
13、d 方法向集合中添加元素4) 用get方法獲取集合中得指定元素 ,由于 ArrayList 集合得索引得取值范圍就是從 0開始得 ,最后 一個(gè)索引就是 size1。所以 ,要獲取集合中得第 2 個(gè)元素應(yīng)該就是 get(1)。、案例實(shí)現(xiàn)import java、util 、 *;public class Example03public static void main(String args) ArrayList array = new ArrayList; array 、 add("lisi");array、 add("wangwu");array 、 a
14、dd("jordan"); array 、 add("jackson"); array 、 add("white");"第 2個(gè)元素就是 :" + array、get(1);運(yùn)行結(jié)果如圖 74 所示。圖 7-4 運(yùn)行結(jié)果三、案例總結(jié)1、在 ArrayList 內(nèi)部封裝了一個(gè)長(zhǎng)度可變得數(shù)組對(duì)象,當(dāng)存入得元素超過(guò)數(shù)組長(zhǎng)度時(shí) ,ArrayList 會(huì)在內(nèi)存中分配一個(gè)更大得數(shù)組來(lái)存儲(chǔ)這些元素,因此可以將 ArrayList 集合瞧作一個(gè)長(zhǎng)度可變得數(shù)組。2、索引位置為 1 得元素就是集合中得第二個(gè)元素 ,這就說(shuō)明集合與數(shù)組一
15、樣 ,索引得取值范圍就是從 0 開始得 ,最后一個(gè)索引就是 size1,在訪問(wèn)元素時(shí)一定要注意索引不可超出此范圍,否則會(huì)拋出角標(biāo)越界異常IndexOutOfBoundsException 。3、由于 ArrayList 集合得底層就是使用一個(gè)數(shù)組來(lái)保存元素,在增加或刪除指定位置得元素時(shí) ,會(huì)導(dǎo)致創(chuàng)建新得數(shù)組 ,效率比較低 ,因此不適合做大量得增刪操作。但這種數(shù)組得結(jié)構(gòu)允許程序通過(guò)索引得方式來(lái)訪 問(wèn)元素 ,因此使用 ArrayList 集合查找元素很便捷。案例 74 LinkedList 集合得特殊方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :LinkedList 集合2、練習(xí)目標(biāo)? 了解 Li
16、nkedList 集合得特點(diǎn)? 掌握 LinkedList 集合得特殊方法得使用3、需求分析ArrayList 集合在查詢?cè)貢r(shí)速度很快 ,但在增刪元素時(shí)效率較低 ,為了克服這種局限性 ,可以使 用 List 接口得另一個(gè)實(shí)現(xiàn)類 LinkedList 。LinkedList 集合除了對(duì)于元素得增刪操作具有很高得效率 還專門針對(duì)元素得增刪操作定義了一些特有得方法。 為了熟悉這些特殊得方法 ,本案例將演示如何 使用 LinkedList 中得特殊方法對(duì)集合進(jìn)行增刪操作。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example04,在該類中定義一個(gè) LinkedList 集合2) 分別使用 add
17、First 與 addLast 方法向集合中添加元素3) 使用 peekFirst 方法獲取集合中得第一個(gè)元素4) 使用 pollFirst 方法獲取并移除集合中得第一個(gè)元素5) 使用 pollLast 方法獲取并移除集合中得最后一個(gè)元素6) 此時(shí) ,集合中應(yīng)該沒(méi)有元素了 ,用 peekLast 方法獲取集合中得最后一個(gè)元素 ,由于集合為空 , 應(yīng)該 返回 NULL二、案例實(shí)現(xiàn)import java、util 、 *;public class Example04 public static void main(String args) LinkedList link = new LinkedL
18、ist;link 、 addFirst("abc1");/ 將指定元素插入此集合得開頭link 、 addLast("haha");/ 將指定元素添加到此集合得結(jié)尾;/ 獲取但不移除此集合得第一個(gè)元素;/ 獲取但不移除此集合得最后一個(gè)元素;/ 獲取并移除此集合得第一個(gè)元素;/ 獲取并移除此集合得最后一個(gè)元素運(yùn)行結(jié)果如圖 75 所示。圖 7-5 運(yùn)行結(jié)果三、案例總結(jié)1、LinkedList 集合內(nèi)部維護(hù)了一個(gè)雙向循環(huán)鏈表 ,鏈表中得每一個(gè)元素都使用引用得方式來(lái)記住它得前 一個(gè)元素與后一個(gè)元素 ,從而可以將所有得元素彼此連接起來(lái)。當(dāng)插入一個(gè)新元素時(shí),只需要修
19、改元素之間得這種引用關(guān)系即可 ,刪除一個(gè)節(jié)點(diǎn)也就是如此。 正因?yàn)檫@樣得存儲(chǔ)結(jié)構(gòu) ,所以 LinkedList 集合對(duì)于元素得增 刪操作具有很高得效率。2、在本案例中 ,所用得方法及其功能具體如下 :1) peekFirst 方法用于獲取 LinkedList 集合中得第一個(gè)元素 ,如果此列表為空則返回 NULL2) peekLast 方法用于獲取 LinkedList 集合中得最后一個(gè)元素 ,如果此列表為空則返回 NULL3) pollFirst 方法用于獲取并移除 LinkedList 集合中得第一個(gè)元素 ,如果此列表為空則返回 NULL4) pollLast 方法用于獲取并移除 Linke
20、dList 集合中得最后一個(gè)元素 ,如果此列表為空則返回 NULL5) addFirst 方法用于添加 LinkedList 集合中得第一個(gè)元素6) addLast 方法用于添加 LinkedList 集合中得最后一個(gè)元素案例 75 Iterator 遍歷集合元素一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :Iterator 接口2、練習(xí)目標(biāo)? 掌握 Iterator 迭代器得使用3、需求分析在程序開發(fā)中 ,經(jīng)常需要遍歷集合中得所有元素。針對(duì)這種需求,JDK 專門提供了一個(gè)接口Iterator 。為了使初學(xué)者熟悉 Iterator 迭代器得使用 ,本案例將演示如何使用 Iterator 迭代器遍歷
21、集合 中得元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example052) 在類中定義一個(gè) List 集合 ,并向集合中添加數(shù)據(jù)3) 通過(guò)調(diào)用 List 集合得 iterator 方法獲得迭代器對(duì)象4) 在 while 循環(huán)條件中使用 hashNext 方法判斷集合中就是否存在下一個(gè)元素, 如果存在 ,則調(diào)用next 方法將元素取出 ,否則說(shuō)明已到達(dá)了集合末尾 ,停止遍歷元素、案例實(shí)現(xiàn)定義 Example05 類 ,其代碼如下import java、util 、 *;public class Example05 public static void main(String args)
22、Listlist = new ArrayList;list、add("abc1");/ 向集合中添加元素list、add("abc2");list、add("abc3");list、add("abc4");Iterator it = list、 iterator; /獲取迭代器對(duì)象while (it 、 hasNext) /判斷就是否還有元素Object obj = it 、 next; /取出元素 運(yùn)行結(jié)果如圖 76 所示。圖 7-6 運(yùn)行結(jié)果三、案例總結(jié)1 、需要注意得就是 , 在通過(guò) next 方法獲取元素時(shí)
23、 ,必須保證要獲取得元素存在,否則 ,會(huì)拋出NoSuchElementException 異常。2、Iterator 迭代器對(duì)象在遍歷集合時(shí) , 內(nèi)部采用指針得方式來(lái)跟蹤集合中得元素,圖 77 演示了 Iterator 對(duì)象迭代元素得過(guò)程。圖 7-7 遍歷元素過(guò)程圖案例 76 foreach 循環(huán) : 簡(jiǎn)化遍歷一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :foreach 循環(huán)2、練習(xí)目標(biāo)? 掌握使用 foreach 循環(huán)遍歷集合與數(shù)組3、需求分析雖然 Iterator 可以用來(lái)遍歷集合中得元素 ,但寫法上比較繁瑣 ,為了簡(jiǎn)化書寫 ,從 JDK5 、0開始 , 提供了 foreach 循環(huán)。 for
24、each 循環(huán)用于遍歷數(shù)組或集合中得元素。 為了讓初學(xué)者能熟悉 foreach 循 環(huán)得使用 ,本案例將演示如何用 foreach 循環(huán)遍歷數(shù)組與集合中得元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example06,2) 在該類中定義一個(gè) List 集合 ,向集合中添加四個(gè)元素3) 用 foreach 循環(huán)遍歷集合中得元素4) 在類中定義一個(gè)數(shù)組 arr,靜態(tài)初始化數(shù)組 int arr = 3,2,6;5) 用 foreach 循環(huán)遍歷 arr 中得元素二、案例實(shí)現(xiàn)import java 、util 、 *;public class Example06 public static vo
25、id main(String args) / 創(chuàng)建 list 集合List list = new ArrayList;list 、 add("sv");list 、 add("lv");list 、 add("mv");list 、 add("tv");" 遍歷集合中得元素 :");for (Object obj : list) /foreach 循環(huán)遍歷集合中得元素/ 定義數(shù)組int arr = 3, 2, 6 ;" 遍歷數(shù)組中得元素 :");for (int x : ar
26、r) /foreach 循環(huán)遍歷數(shù)組中得元素運(yùn)行結(jié)果如圖 78 所示。圖 7-8 運(yùn)行結(jié)果三、案例總結(jié)1、通過(guò)案例可以瞧出 ,foreach 循環(huán)在遍歷集合時(shí)語(yǔ)法非常簡(jiǎn)潔 ,沒(méi)有循環(huán)條件 ,也沒(méi)有迭代語(yǔ)句 ,所有這 些工作都交給虛擬機(jī)去執(zhí)行了。 foreach 循環(huán)得次數(shù)就是由容器中元素得個(gè)數(shù)決定得,每次循環(huán)時(shí) ,foreach 中都通過(guò)變量將當(dāng)前循環(huán)得元素記住 ,從而將集合中得元素分別打印出來(lái)。2、使用 foreach 循環(huán)遍歷集合與數(shù)組時(shí) ,只能訪問(wèn)集合中得元素 ,不能對(duì)其中得元素進(jìn)行修改。案例 77 ListIterator 迭代器得特有方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :Li
27、stIterator 接口2、練習(xí)目標(biāo)? 掌握 ListIterator 接口中特有方法得使用3、需求分析ListIterator 迭代器就是 Iterator 得子類 ,該類在父類得基礎(chǔ)上增加了一些特有方法。為了讓初 學(xué)者能熟悉 ListIterator 接口中特有方法得使用 ,本案例將演示如何用 ListIterator 接口中得方法向集 合中插入元素與逆向遍歷集合。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example072) 在該類中定義一個(gè) List 集合 ,向集合中添加四個(gè)元素3) 用 ListIterator 接口得 add 方法向集合中插入一個(gè)元素并遍歷集合list4) 用
28、 ListIterator 接口得 boolean hasPrevious 方法逆向遍歷集合public class Example07 public static void main(String args) List list = new ArrayList;list 、 add("abc1");list 、 add("abc2");list 、 add("abc3");list 、 add("abc4");ListIterator lit = list、 listIterator;while (lit 、 h
29、asNext) Object o = lit 、 next;/ 遍歷到 abc4 元素時(shí) , 向集合中添加一個(gè)元素if ("abc4"、 equals(o) lit 、 add("abc5");/ 逆向遍歷集合" 以下就是逆向遍歷 ");while (lit、 hasPrevious) 運(yùn)行結(jié)果如圖 79 所示。圖 7-9 運(yùn)行結(jié)果三、案例總結(jié)1、 ListIterator 迭代器得特有方法 ,如表 73 所示。表 73 ListIterator 迭代器得特有方法方法聲明功能描述void add(Object o)將指定得元素插入列表
30、 (可選操作 )boolean hasPrevious如果以逆向遍歷列表 ,列表迭代器有多個(gè)元素 ,則返回 trueObject previous返回列表中得前一個(gè)元素void remove從列表中移除由 next 或 previous 返回得最后一個(gè)元素 ( 可選操作 )2、在本案例中 ,使用 hasPrevious 方法判斷就是否存在上一個(gè)元素 ,如果存在 ,則通過(guò) previous 方法將元 素取出 ,否則 ,則表示到達(dá)了集合得末尾 ,沒(méi)有要遍歷得元素。3、在遍歷過(guò)程中 ,如果想增加元素同樣不能調(diào)用集合對(duì)象得add方法 ,此時(shí)需要使用 ListIterator 提供得add 方法 ,否則
31、會(huì)出現(xiàn)并發(fā)修改異常 ConcurrentModificationException 。需要注意得就是 ,ListIterator 迭代器只 能用于 List 集合。案例 78 用 Enumeration 迭代 Vector 集合一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :Enumeration 接口2、練習(xí)目標(biāo)? 掌握如何使用 Enumeration 迭代器得特有方法遍歷 Vector 集合中得元素3、需求分析在 JDK1、 2 以前還沒(méi)有 Iterator 接口得時(shí)候 ,遍歷集合需要使用 Enumeration 迭代器接口。由 于很多程序中依然在使用 Enumeration, 因此了解該接口得
32、用法就是很有必要得。 Vevtor 集合就是 List 接口得一個(gè)實(shí)現(xiàn)類。為了讓初學(xué)者能熟悉 Enumeration 迭代器得用法 ,本案例將演示如何用 Enumeration 迭代器遍歷 Vector 集合。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example08,在該類中定義一個(gè) Vector 集合 v2) 向集合 v 中添加四個(gè)元素3) 用 Enumeration 迭代器遍歷集合 v,輸出集合中得每一個(gè)元素、案例實(shí)現(xiàn)import java、util 、 *;public class Example08 public static void main(String args) Vec
33、tor v = new Vector; / 創(chuàng)建 Vector 集合v 、 addElement(" 秦始皇 ");v 、 addElement(" 成吉思汗 ");v 、 addElement(" 朱元璋 ");v 、 addElement(" 李世民 ");Enumeration e = v、 elements;while (e 、 hasMoreElements) /Enumeration迭代器遍歷 Vector 集合String name = (String) e、 nextElement;運(yùn)行結(jié)果如圖 7
34、10 所示。圖 7-10 運(yùn)行結(jié)果三、案例總結(jié)1、 JDK 中提供了一個(gè) Vevtor 集合 ,該集合就是 List 接口得一個(gè)實(shí)現(xiàn)類 ,用法與 ArrayList 完全相同 ,區(qū)別 在于 Vector 集合就是線程安全得 , 而 ArrayList 集合就是線程不安全得。在 Vector 類中提供了一個(gè) elements 方法用于返回 Enumeration 對(duì)象 ,通過(guò) Enumeration 對(duì)象就可以遍歷該集合中得元素。2、在本案例中 ,使用 Enumeration 迭代器時(shí) , 使用一個(gè) while 循環(huán)對(duì)集合中得元素進(jìn)行迭代 ,其過(guò)程與 Iterator 迭代得過(guò)程類似 ,通過(guò) h
35、asMoreElements 方法循環(huán)判斷就是否存在下一個(gè)元素,如果存在 ,則通過(guò)nextElement 方法逐一取出每個(gè)元素。案例 79 HashSet 集合得存儲(chǔ)一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :HashSet 集合2、練習(xí)目標(biāo)? 了解 HashSet 集合得存儲(chǔ)特點(diǎn)? 掌握 HashSet 集合得用法3、需求分析HashSet 就是 Set 接口得一個(gè)實(shí)現(xiàn)類 ,它所存儲(chǔ)得元素就是不可重復(fù)得 ,并且元素都就是無(wú)序 得。為了讓初學(xué)者熟悉 HashSet 集合得用法 ,本案例將針對(duì) HashSet 集合中元素不可重復(fù)得特點(diǎn) 對(duì) HashSet 集合得存儲(chǔ)與遍歷過(guò)程進(jìn)行演示。4、設(shè)計(jì)思路
36、(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類 Example09,在該類中定義一個(gè) HashSet 集合 hs2) 向集合 hs中添加 6個(gè)元素 ,其中有一些重復(fù)得元素3) 用 size 方法獲取添加完元素后集合中元素得個(gè)數(shù)4) 用 Iterator 迭代器遍歷集合得每一個(gè)元素5) 觀察在輸出結(jié)果中 ,就是否存在重復(fù)得元素、案例實(shí)現(xiàn)import java、util 、 *;public class Example09 public static void main(String args) / 創(chuàng)建 HashSet 集合 HashSet hs = new HashSet; / 向 HashSet 集合中添加
37、元素 , 其中包括重復(fù)元素 hs 、 add("abc2"); hs 、 add("abc2"); hs 、 add("abc1");hs 、 add("abc4");hs 、 add("abc4");hs 、 add("abc3");/ 輸出集合中元素得個(gè)數(shù)" 添加后集合中元素個(gè)數(shù) :"+hs 、 size);/ 輸出集合中每一個(gè)元素Iterator it = hs、 iterator;" 添加后集合中包含以下元素 :");while
38、 (it、 hasNext) 運(yùn)行結(jié)果如圖 711 所示。圖 7-11 運(yùn)行結(jié)果三、案例總結(jié)1、HashSet 就是 Set接口得一個(gè)實(shí)現(xiàn)類 ,它所存儲(chǔ)得元素就是不可重復(fù)得 ,并且元素都就是無(wú)序得。 當(dāng)向 HashSet集合中添加一個(gè)對(duì)象時(shí) ,首先會(huì)調(diào)用該對(duì)象得 hashCode 方法來(lái)確定元素得存儲(chǔ)位置 ,然后再調(diào)用對(duì) 象得 equals 方法來(lái)確保該位置沒(méi)有重復(fù)元素。2、在本案例中 ,首先通過(guò) add方法向 HashSet集合依次添加了六個(gè)字符串 ,然后通過(guò) Iterator 迭代器遍歷 所有得元素并輸出打印。 從打印結(jié)果可以瞧出取出元素得順序與添加元素得順序并不一致,并且重復(fù)存入得字符串
39、對(duì)象 "abc2"與"abc4" 被去除了 ,只添加了一次。案例 710 將 Object 類存入 HashSet一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :HashSet 集合2、練習(xí)目標(biāo)? 掌握如何將對(duì)象存入 HashSet 集合并且去除重復(fù)對(duì)象3、需求分析HashSet 集合之所以能確保不出現(xiàn)重復(fù)得元素,就是因?yàn)樗谔砑訉?duì)象時(shí) ,會(huì)先調(diào)用該對(duì)象得hashCode 方法來(lái)確定元素得存儲(chǔ)位置 ,再調(diào)用對(duì)象得 equals 方法來(lái)確保該位置沒(méi)有重復(fù)元素。為 了將 Object 類存入 HashSet 集合,本案例將針對(duì)如何重寫 Object 類中得 has
40、hCode與 equals 方法去 除重復(fù)得 Object 對(duì)象進(jìn)行演示。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 設(shè)計(jì)一個(gè) Person類,在該類中定義兩個(gè)變量 name 與 age2) 在 Person 類中重寫 hashCode與 equals 方法3) 編寫類 Example10,在該類中定義一個(gè) HashSet 集合4) 將 Person 對(duì)象存入 HashSet 集合中 ,其中含有重復(fù)得 Person 對(duì)象5) 遍歷 HashSet 集合中得元素 ,觀察結(jié)果就是否含有重復(fù)得對(duì)象二、案例實(shí)現(xiàn)設(shè)計(jì) Person 類,其代碼如下 :class Person private String name;
41、private int age; public Person(String name, int age) this 、 name = name; this 、 age = age;/ 重寫 hashCode 方法 , 返回 name 屬性得哈希值 public int hashCode return name 、 hashCode + age * 2;/ 重寫 equals 方法 public boolean equals(Object obj) if (this = obj) return true;if (obj instanceof Person) Person p = (Person)
42、 obj;return && this、age = p 、 age;return false;/ 重寫 toString 方法 public String toString return "Person " + name + age; 編寫類 Example10, 其代碼如下 : import java、util 、 *;public class Example10 public static void main(String args) / 創(chuàng)建 HashSet 對(duì)象 HashSet hs = new HashSet; / 將 Person 對(duì)象存入集合
43、hs 、 add(new Person("lisa", 21); hs 、 add(new Person("lisi", 32); hs 、 add(new Person("lisi", 32); hs 、 add(new Person("leilei", 31);hs 、 add(new Person("lusi", 25); hs 、 add(new Person("lusi", 25); / 遍歷集合中得元素Iterator it = hs、 iterator;whil
44、e (it、 hasNext) Person p = (Person) it、 next;運(yùn)行結(jié)果如圖 712 所示。圖 7-12 運(yùn)行結(jié)果三、案例總結(jié)在本案例中 ,當(dāng) HashSet 集合得存入元素時(shí) , 首先調(diào)用當(dāng)前存入對(duì)象得 hashCode 方法獲得 name 屬性得 哈希值 ,然后根據(jù)對(duì)象得哈希值計(jì)算出一個(gè)存儲(chǔ)位置。如果該位置上沒(méi)有元素,則直接將元素存入 ,如果該位置上有元素存在 ,則會(huì)調(diào)用 equals 方法讓當(dāng)前存入得元素依次與該位置上得元素進(jìn)行比較,如果返回得結(jié)果為 false 就將該元素存入集合 , 返回得結(jié)果為 true 則說(shuō)明有重復(fù)元素 ,就將該元素舍棄。整個(gè)存儲(chǔ)得流程如
45、圖 713 所示。圖 7-13 HashSet 對(duì)象存儲(chǔ)過(guò)程案例 711 TreeSet 集合得存儲(chǔ)一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :TreeSet 集合2、練習(xí)目標(biāo)? 了解 TreeSet 集合得存儲(chǔ)特點(diǎn)? 掌握 TreeSet 集合得存儲(chǔ)與迭代操作3、需求分析TreeSet 就是 Set 接口得另一個(gè)實(shí)現(xiàn)類 ,它內(nèi)部采用平衡二叉樹來(lái)存儲(chǔ)元素 ,這樣得結(jié)構(gòu)可以保 證 TreeSet 集合中沒(méi)有重復(fù)得元素 ,并且可以對(duì)元素進(jìn)行排序。為了讓初學(xué)者能熟悉TreeSet 集合得使用 ,本案例通過(guò)向 TreeSet 集合添加元素并遍歷集合元素來(lái)演示。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫一個(gè)類
46、Example11,定義一個(gè) TreeSet 集合2) 向 TreeSet 集合中添加一系列元素 ,其中有重復(fù)元素3) 遍歷輸出 TreeSet 集合中所有得元素、案例實(shí)現(xiàn)import java、 util 、public class Example11 public static void main(String args) TreeSet ts = new TreeSet;/ 創(chuàng)建TreeSet集合ts 、 add("abc3");/向集合中添加一系列元素, 其中包括重復(fù)元素ts 、 add("abc2");ts 、 add("abc4&q
47、uot;);ts 、 add("aabbcc");ts 、 add("aabbcc");ts 、 add("abc1");Iterator it = ts、 iterator;while (it、 hasNext) / 使用Iterator迭代器遍歷TreeSet 集合元素運(yùn)行結(jié)果如圖 714 所示。圖 7-14 運(yùn)行結(jié)果三、案例總結(jié)TreeSet 內(nèi)部采用平衡二叉樹來(lái)存儲(chǔ)元素 ,所謂二叉樹就就是說(shuō)每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)得有序樹,每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)組成得樹稱為子樹,通常左側(cè)得子節(jié)點(diǎn)稱為“左子樹” ,右側(cè)得節(jié)點(diǎn)稱為“右子樹” ,其中左
48、子樹上得元素應(yīng)小于它得根結(jié)點(diǎn),而右子樹上得元素應(yīng)大于它得根結(jié)點(diǎn)。二叉樹中元素得存儲(chǔ)結(jié)構(gòu)如圖715 所示。圖 7-15 二叉樹得存儲(chǔ)結(jié)構(gòu)案例 712 自定義比較器一、案例描述1、考核知識(shí)點(diǎn) 編號(hào) : 名稱 :parator 比較器2、練習(xí)目標(biāo)? 掌握如何通過(guò)自定義比較器得方式對(duì) TreeSet 集合中得元素排序3、需求分析 如果定義得類沒(méi)有實(shí)現(xiàn) parable 接口或者對(duì)于實(shí)現(xiàn)了 parable 接口得類而不想按照定義得 pareTo方法進(jìn)行排序 ,這時(shí) ,可以通過(guò)自定義比較器得方式對(duì) TreeSet集合中得元素排序。 為了讓初學(xué)者能掌握自定義比較器得編寫 ,本案例將通過(guò)自定義比較器對(duì) Tree
49、Set 集合中得元素排序。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 設(shè)計(jì)類 Person,該類中有變量 name 與 age,并實(shí)現(xiàn)它們得 get 與 set 方法。2) 設(shè)計(jì)類 Myparator 自定義比較器 ,該類實(shí)現(xiàn)了 parator 接口3) 在類 Myparator 中實(shí)現(xiàn)比較方法 ,以 Person 對(duì)象中 age 為主要比較條件 ,如果 age 相等再比較 name4) 編寫類 Example12, 創(chuàng)建 TreeSet 集合 ,在創(chuàng)建 TreeSet 集合時(shí)傳入自定義比較器 Myparator 。并 將 Person 對(duì)象存入集合中5) 遍歷集合中得元素 ,觀察執(zhí)行結(jié)果、案例實(shí)現(xiàn)改寫
50、Person 類 ,具體代碼如下 :class Person private String name;private int age;public Person(String name,int age) this、 name = name;this、 age = age;public String toStringreturn "Person "+name + age;public String getName return name;public void setName(String name) this 、 name = name;public int getAge
51、return age;public void setAge(int age) this 、 age = age;自定義比較器 ,具體代碼如下 :class Myparator implements parator public int pare(Object o1, Object o2) / 類型轉(zhuǎn)換 , 比較得就是 Person 對(duì)象Person p1 = (Person) o1;Person p2 = (Person) o2;/ 以年齡為主要條件int num = p1、getAge p2 、 getAge;return num = 0 ? p1、 getName 、pareTo(p2 、
52、 getName) : num;編寫 Example12 類 ,具體代碼如下 :import ;import ;import ; public class Example12 public static void main(String args) TreeSet ts = new TreeSet(new Myparator);ts 、 add(new Person("lisa", 22);ts 、 add(new Person("lisi", 24);ts 、 add(new Person("lisi", 21);ts 、 add(
53、new Person("wangwu", 20);ts 、 add(new Person("zhaoliu", 19);ts 、 add(new Person("zhaoliu", 26); Iterator it = ts、 iterator;while (it、 hasNext) 運(yùn)行結(jié)果如圖 716 所示。圖 7-16 運(yùn)行結(jié)果三、案例總結(jié),這就相當(dāng)于定,比較器對(duì)象在本案例中 ,定義了一個(gè) Myparator 類實(shí)現(xiàn)了 parator 接口 ,在 pare 方法中實(shí)現(xiàn)元素得比較 義了一個(gè)比較器。 在創(chuàng)建 TreeSet 集合時(shí)
54、,將 Myparator 比較器對(duì)象傳入 ,當(dāng)向集合中添加元素時(shí) 得 pare 方法就會(huì)被自動(dòng)調(diào)用 ,從而使存入 TreeSet 集合中得字符串按照長(zhǎng)度進(jìn)行排序。案例 713 操作 HashMap 集合得方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào) :名稱 :HashMap 集合2、練習(xí)目標(biāo)? 了解 HashMap 集合得存儲(chǔ)特點(diǎn)? 掌握如何使用操作 HashMap 集合得方法3、需求分析Map 接口用于存儲(chǔ)具有對(duì)應(yīng)關(guān)系得數(shù)據(jù)。 它得每個(gè)元素都包含一個(gè)鍵對(duì)象 Key 與值對(duì)象 Value, 鍵與值對(duì)象之間存在映射。 HashMap 集合就是 Map 接口得一個(gè)實(shí)現(xiàn)類。為了讓初學(xué)者能熟悉使 用 HashM
55、ap 集合 ,本章將采用使用不同方法對(duì) HashMap 集合進(jìn)行操作 , 學(xué)習(xí) HashMap 集合得使用 方法。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理 )1) 編寫類 Example13,創(chuàng)建一個(gè) HashMap 集合 ,并向集合中添加元素2) 使用一系列方法分別對(duì)定義得集合進(jìn)行增加、移除、判斷等操作3) 運(yùn)行程序 ,根據(jù)輸出結(jié)果 ,分析這些方法對(duì) HashMap 集合得操作、案例實(shí)現(xiàn)編寫 Example13 類 ,具體代碼如下 :、utilimport javapublic class Example13 public static void main(String args) / 創(chuàng)建集合對(duì)象Map m
56、ap = new HashMap;/ 添加元素map 、put("czbk001", "map、put("czbk003", "林青霞 "); 林志玲 ");林志穎 ");, 就替換 , 返回以前與 key 關(guān)聯(lián)得值。/ V remove(Object key):根據(jù)指定得鍵刪除鍵值對(duì)。map 、put("czbk002", "/ 添加元素 , 如果鍵存在"czbk003", "林志炫 ");"remove:" +
57、map、 remove("czbk003");/ 判斷指定得鍵就是否在集合中存在"containsKey:" + map、 containsKey("czbk002");"containsKey:" + map、 containsKey("czbk007");/ 判斷指定得值就是否在集合中存在"containsValue:" + map、containsValue("林志穎 ");/ 判斷集合就是否為空"isEmpty:" + map 、 isEmpty); / 集合中元素得個(gè)數(shù)"size:" + map、 size);/ 輸出集合對(duì)象名稱"map:" + map);運(yùn)行結(jié)果如圖 717 所示。圖 7-17 運(yùn)行結(jié)果三、案例總結(jié)在本案例中 ,從運(yùn)行結(jié)果可以瞧出 :1) 集合中鍵為 czbk003 對(duì)應(yīng)得值就是 "林志玲 "。2) 由于集合中存在鍵 czbk003,所以程序做 map、put("czbk003", "
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度科研儀器租賃及技術(shù)服務(wù)合同
- 2024年定制:5G網(wǎng)絡(luò)技術(shù)研發(fā)與技術(shù)服務(wù)合同
- 2024合作開發(fā)合同的開發(fā)內(nèi)容和合作方式
- 04版加工承攬合同生產(chǎn)工藝與質(zhì)量控制
- 2024年度校園租賃:電動(dòng)自行車合同
- 2024光電子技術(shù)研發(fā)與生產(chǎn)合同
- 2024廣州市勞動(dòng)合同范文新版
- 2024營(yíng)業(yè)租賃合同范文
- 2024年度電力設(shè)備安裝與維護(hù)合同
- 2024年度計(jì)算機(jī)軟件開發(fā)與銷售合同
- DB41T 2280-2022 路橋用泡沫輕質(zhì)土應(yīng)用技術(shù)規(guī)程
- 公共衛(wèi)生主題培訓(xùn)
- 廣東省特種設(shè)備作業(yè)人員考試機(jī)構(gòu)申請(qǐng)表
- 第三章-自然語(yǔ)言的處理(共152張課件)
- 分布式光伏系統(tǒng)組件缺陷檢測(cè)及診斷技術(shù)規(guī)范
- 企業(yè)網(wǎng)站建設(shè)及維護(hù)服務(wù)合同
- 北師版八年級(jí)數(shù)學(xué)上冊(cè) 第四章 一次函數(shù)(壓軸專練)(十大題型)
- 住院醫(yī)師規(guī)范化培訓(xùn)教學(xué)病例討論教案(模板)
- 2023年合肥市軌道交通集團(tuán)有限公司招聘筆試真題
- 2024年安全教育培訓(xùn)變更新增記錄
- 醫(yī)學(xué)文獻(xiàn)檢索復(fù)習(xí)試題和答案解析(四)
評(píng)論
0/150
提交評(píng)論