第5講_集合_201602_第1頁(yè)
第5講_集合_201602_第2頁(yè)
第5講_集合_201602_第3頁(yè)
第5講_集合_201602_第4頁(yè)
第5講_集合_201602_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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、1Java核心技術(shù)(上)核心技術(shù)(上)主講:蔣世忠主講:蔣世忠第5講 集合類集合類概述 為什么出現(xiàn)集合類?為什么出現(xiàn)集合類?面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,所面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,所以為了方便對(duì)多個(gè)對(duì)象的操作,以為了方便對(duì)多個(gè)對(duì)象的操作,Java就提供了集合就提供了集合類類。 數(shù)組和集合類同是容器,有何不同?數(shù)組和集合類同是容器,有何不同?數(shù)組雖然也可以存儲(chǔ)對(duì)象,但長(zhǎng)度是固定的;集合數(shù)組雖然也可以存儲(chǔ)對(duì)象,但長(zhǎng)度是固定的;集合長(zhǎng)度是可變的。數(shù)組中可以存儲(chǔ)基本數(shù)據(jù)類型,集長(zhǎng)度是可變的。數(shù)組中可以存儲(chǔ)基本數(shù)據(jù)類型,集合只能存儲(chǔ)對(duì)象。合只能存儲(chǔ)對(duì)象。 集合類的特點(diǎn)集合類

2、的特點(diǎn)集合只用于存儲(chǔ)對(duì)象,集合長(zhǎng)度是可變的,集合可集合只用于存儲(chǔ)對(duì)象,集合長(zhǎng)度是可變的,集合可以存儲(chǔ)不同類型的對(duì)象。以存儲(chǔ)不同類型的對(duì)象。Collection接口概述 Collection接口概述接口概述Collection 層次結(jié)構(gòu)中的根接口。層次結(jié)構(gòu)中的根接口。Collection 表示表示一組對(duì)象,這些對(duì)象也稱為一組對(duì)象,這些對(duì)象也稱為 collection 的元素。一的元素。一些些 collection 允許有重復(fù)的元素,而另一些則不允允許有重復(fù)的元素,而另一些則不允許。一些許。一些 collection 是有序的,而另一些則是無(wú)序是有序的,而另一些則是無(wú)序的。的。Collection

3、接口成員方法1、添加功能:、添加功能: boolean add(E e) boolean addAll(Collection c)2、刪除功能、刪除功能 boolean remove(Object o) boolean removeAll(Collection c) void clear()3、判斷功能、判斷功能 boolean contains(Object o) boolean containsAll(Collection c) boolean isEmpty()Collection接口成員方法4、獲取功能、獲取功能 Iterator iterator()(重點(diǎn)重點(diǎn))5、長(zhǎng)度功能、長(zhǎng)度功能

4、 int size():元素的個(gè)數(shù)元素的個(gè)數(shù)6、交集功能、交集功能 boolean retainAll(Collection c)7、把集合轉(zhuǎn)換為數(shù)組、把集合轉(zhuǎn)換為數(shù)組 Object toArray()Iterator接口概述 Iterator iterator()迭代器,集合的專用遍歷方式迭代器,集合的專用遍歷方式 Iterator接口概述接口概述對(duì)對(duì) collection 進(jìn)行迭代的迭代器進(jìn)行迭代的迭代器依賴于集合而存在依賴于集合而存在Iterator接口成員方法 boolean hasNext() E next()Iterator接口使用和原理講解 Iterator接口的使用講解接口的使

5、用講解 Iterator接口的原理講解接口的原理講解為什么不定義成一個(gè)類,而是一個(gè)接口為什么不定義成一個(gè)類,而是一個(gè)接口看源碼是如何實(shí)現(xiàn)的看源碼是如何實(shí)現(xiàn)的Collection案例案例 存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷 存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷Student(name,age)List接口概述接口概述 List接口概述接口概述有序的有序的 collection(也稱為序列)。此接口的用戶(也稱為序列)。此接口的用戶可以對(duì)列表中每個(gè)元素的插入位置進(jìn)行精確地控制可以對(duì)列表中每個(gè)元素的插入位置進(jìn)行精確地控制。用戶可以根據(jù)元素的整數(shù)索引(在列表中的位置。用戶可以根據(jù)元素的整數(shù)索引(在列

6、表中的位置)訪問(wèn)元素,并搜索列表中的元素。)訪問(wèn)元素,并搜索列表中的元素。與與 set 不同,列表通常允許重復(fù)的元素。不同,列表通常允許重復(fù)的元素。 List案例案例存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷List接口成員方法接口成員方法 void add(int index,E element) E remove(int index) E get(int index) E set(int index,E element) ListIterator listIterator()ListIterator接口的成員方法 boolean hasPrevious() E

7、 previous() ConcurrentModificationException現(xiàn)象現(xiàn)象原因原因解決方案解決方案ArrayList類概述及使用類概述及使用 ArrayList類概述類概述底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢線程不安全,效率高線程不安全,效率高 ArrayList案例案例存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷Vector類概述及使用類概述及使用 Vector類概述類概述底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢線程安全,效率低線程安全,效率低 Vector類特有功能類特有功能publ

8、ic void addElement(E obj)public E elementAt(int index)public Enumeration elements() Vector案例案例存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷LinkedList類概述及使用類概述及使用 LinkedList類概述類概述底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快線程不安全,效率高線程不安全,效率高 LinkedList類特有功能類特有功能public void addFirst(E e)及及addLast(E e)public E getFirst()

9、及及getLast()public E removeFirst()及及public E removeLast() LinkedList案例案例存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷List集合練習(xí)集合練習(xí) ArrayList去除集合中字符串的重復(fù)值去除集合中字符串的重復(fù)值(字符串的內(nèi)容相同字符串的內(nèi)容相同)去除集合中自定義對(duì)象的重復(fù)值去除集合中自定義對(duì)象的重復(fù)值(對(duì)象的成員變量值對(duì)象的成員變量值都相同都相同) LinkedList請(qǐng)用請(qǐng)用LinkedList模擬棧數(shù)據(jù)結(jié)構(gòu)的集合,并測(cè)試模擬棧數(shù)據(jù)結(jié)構(gòu)的集合,并測(cè)試泛型概述及使用泛型概述及使用 JDK1.5以后出

10、現(xiàn)的機(jī)制以后出現(xiàn)的機(jī)制 泛型出現(xiàn)的原因泛型出現(xiàn)的原因 泛型出現(xiàn)的好處泛型出現(xiàn)的好處 泛型的書(shū)寫(xiě)格式泛型的書(shū)寫(xiě)格式 把前面的集合代碼用泛型改進(jìn)把前面的集合代碼用泛型改進(jìn)泛型由來(lái)泛型由來(lái) 為什么會(huì)有泛型呢為什么會(huì)有泛型呢?通過(guò)案例引入通過(guò)案例引入早期的早期的Object類型可以接收任意的對(duì)象類型,但是類型可以接收任意的對(duì)象類型,但是在實(shí)際的使用中,會(huì)有類型轉(zhuǎn)換的問(wèn)題。也就存在在實(shí)際的使用中,會(huì)有類型轉(zhuǎn)換的問(wèn)題。也就存在這隱患,所以這隱患,所以Java提供了泛型來(lái)解決這個(gè)安全問(wèn)題。提供了泛型來(lái)解決這個(gè)安全問(wèn)題。泛型應(yīng)用泛型應(yīng)用 泛型類泛型類把泛型定義在類上把泛型定義在類上格式格式:public cl

11、ass 類名類名注意注意:泛型類型必須是引用類型泛型類型必須是引用類型 泛型方法泛型方法把泛型定義在方法上把泛型定義在方法上格式格式:public 返回類型返回類型 方法名方法名(泛型類型泛型類型 .) 泛型接口泛型接口把泛型定義在接口上把泛型定義在接口上格式格式:public interface 接口名接口名泛型高級(jí)泛型高級(jí)(通配符通配符) 泛型通配符泛型通配符任意類型,如果沒(méi)有明確,那么就是任意類型,如果沒(méi)有明確,那么就是Object以及任意的以及任意的Java類了類了 ? extends E向下限定,向下限定,E及其子類及其子類 ? super E向上限定,向上限定,E及其父類及其父類增

12、強(qiáng)增強(qiáng)for概述及使用概述及使用 增強(qiáng)增強(qiáng)for概述概述簡(jiǎn)化數(shù)組和簡(jiǎn)化數(shù)組和Collection集合的遍歷集合的遍歷 格式:格式:for(元素?cái)?shù)據(jù)類型元素?cái)?shù)據(jù)類型 變量變量 : 數(shù)組或者數(shù)組或者Collection集合集合) 使用變量即可,該變量就是元素 好處:簡(jiǎn)化遍歷好處:簡(jiǎn)化遍歷 注意事項(xiàng):增強(qiáng)注意事項(xiàng):增強(qiáng)for的目標(biāo)要判斷是否為的目標(biāo)要判斷是否為null 把前面的集合代碼的遍歷用增強(qiáng)把前面的集合代碼的遍歷用增強(qiáng)for改進(jìn)改進(jìn)可變參數(shù)概述及使用可變參數(shù)概述及使用 可變參數(shù)概述可變參數(shù)概述定義方法的時(shí)候不知道該定義多少個(gè)參數(shù)定義方法的時(shí)候不知道該定義多少個(gè)參數(shù) 格式格式修飾符修飾符 返回值

13、類型返回值類型 方法名方法名(數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名)注意:注意: 這里的變量其實(shí)是一個(gè)數(shù)組 如果一個(gè)方法有可變參數(shù),并且有多個(gè)參數(shù),那么,可變參數(shù)肯定是最后一個(gè) Arrays工具類中的一個(gè)方法工具類中的一個(gè)方法public static List asList(T. a)List集合練習(xí)集合練習(xí)2 集合的嵌套遍歷集合的嵌套遍歷 獲取獲取10個(gè)個(gè)1-20之間的隨機(jī)數(shù),要求不能重復(fù)之間的隨機(jī)數(shù),要求不能重復(fù) 鍵盤(pán)錄入多個(gè)數(shù)據(jù),以鍵盤(pán)錄入多個(gè)數(shù)據(jù),以0結(jié)束,要求在控制臺(tái)輸結(jié)束,要求在控制臺(tái)輸出這多個(gè)數(shù)據(jù)中的最大值出這多個(gè)數(shù)據(jù)中的最大值Set接口概述接口概述 Set接口概述接口概述一個(gè)不包含

14、重復(fù)元素的一個(gè)不包含重復(fù)元素的 collection。 Set案例案例存儲(chǔ)字符串并遍歷存儲(chǔ)字符串并遍歷存儲(chǔ)自定義對(duì)象并遍歷存儲(chǔ)自定義對(duì)象并遍歷HashSet類概述類概述 HashSet類概述類概述不保證不保證 set 的迭代順序的迭代順序特別是它不保證該順序恒久不變。特別是它不保證該順序恒久不變。 HashSet如何保證元素唯一性如何保證元素唯一性底層數(shù)據(jù)結(jié)構(gòu)是哈希表底層數(shù)據(jù)結(jié)構(gòu)是哈希表(元素是鏈表的數(shù)組元素是鏈表的數(shù)組)哈希表依賴于哈希值存儲(chǔ)哈希表依賴于哈希值存儲(chǔ)添加功能底層依賴兩個(gè)方法:添加功能底層依賴兩個(gè)方法: int hashCode() boolean equals(Object o

15、bj)LinkedHashSet類概述類概述 LinkedHashSet類概述類概述元素有序唯一元素有序唯一由鏈表保證元素有序由鏈表保證元素有序由哈希表保證元素唯一由哈希表保證元素唯一TreeSet類概述類概述 TreeSet類概述類概述使用元素的自然順序?qū)υ剡M(jìn)行排序使用元素的自然順序?qū)υ剡M(jìn)行排序或者根據(jù)創(chuàng)建或者根據(jù)創(chuàng)建 set 時(shí)提供的時(shí)提供的 Comparator 進(jìn)行排序進(jìn)行排序具體取決于使用的構(gòu)造方法。具體取決于使用的構(gòu)造方法。 TreeSet是如何保證元素的排序和唯一性的是如何保證元素的排序和唯一性的底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(shù)底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(shù)(紅黑樹(shù)是一種自平衡的二叉紅黑樹(shù)是一種自

16、平衡的二叉樹(shù)樹(shù))Set集合練習(xí)集合練習(xí) HashSet集合存儲(chǔ)自定義對(duì)象并遍歷。集合存儲(chǔ)自定義對(duì)象并遍歷。如果對(duì)象的成員變量值相同即為同一個(gè)對(duì)象如果對(duì)象的成員變量值相同即為同一個(gè)對(duì)象 TreeSet集合存儲(chǔ)自定義對(duì)象并遍歷集合存儲(chǔ)自定義對(duì)象并遍歷如果對(duì)象的成員變量值相同即為同一個(gè)對(duì)象如果對(duì)象的成員變量值相同即為同一個(gè)對(duì)象按照年齡進(jìn)行從大到小進(jìn)行排序按照年齡進(jìn)行從大到小進(jìn)行排序 編寫(xiě)一個(gè)程序,獲取編寫(xiě)一個(gè)程序,獲取10個(gè)個(gè)1至至20的隨機(jī)數(shù),要求的隨機(jī)數(shù),要求隨機(jī)數(shù)不能重復(fù)。隨機(jī)數(shù)不能重復(fù)。 鍵盤(pán)錄入鍵盤(pán)錄入5個(gè)學(xué)生信息個(gè)學(xué)生信息(姓名姓名,語(yǔ)文成績(jī)語(yǔ)文成績(jī),數(shù)學(xué)成績(jī)數(shù)學(xué)成績(jī),英語(yǔ)成績(jī)英語(yǔ)成績(jī))

17、,按照總分從高到低輸出到控制臺(tái)按照總分從高到低輸出到控制臺(tái)Collection集合總結(jié)集合總結(jié) CollectionList ArrayList Vector LinkedListSet HashSet TreeSetMap接口概述接口概述 Map接口概述接口概述將鍵映射到值的對(duì)象將鍵映射到值的對(duì)象一個(gè)映射不能包含重復(fù)的鍵一個(gè)映射不能包含重復(fù)的鍵每個(gè)鍵最多只能映射到一個(gè)值每個(gè)鍵最多只能映射到一個(gè)值 Map接口和接口和Collection接口的不同接口的不同Map是雙列的是雙列的,Collection是單列的是單列的Map的鍵唯一的鍵唯一,Collection的子體系的子體系Set是唯一的是唯一

18、的Map集合的數(shù)據(jù)結(jié)構(gòu)值針對(duì)鍵有效,跟值無(wú)關(guān)集合的數(shù)據(jù)結(jié)構(gòu)值針對(duì)鍵有效,跟值無(wú)關(guān) Collection集合的數(shù)據(jù)結(jié)構(gòu)是針對(duì)元素有效集合的數(shù)據(jù)結(jié)構(gòu)是針對(duì)元素有效Map接口成員方法接口成員方法 V put(K key,V value) V remove(Object key) void clear() boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() int size()Map接口成員方法接口成員方法 V get(Object key) Set keySet() Collect

19、ion values() SetMap.Entry entrySet()Map集合遍歷集合遍歷 方式方式1:根據(jù)鍵找值:根據(jù)鍵找值獲取所有鍵的集合獲取所有鍵的集合遍歷鍵的集合,獲取到每一個(gè)鍵遍歷鍵的集合,獲取到每一個(gè)鍵根據(jù)鍵找值根據(jù)鍵找值 方式方式2:根據(jù)鍵值對(duì)對(duì)象找鍵和值:根據(jù)鍵值對(duì)對(duì)象找鍵和值獲取所有鍵值對(duì)對(duì)象的集合獲取所有鍵值對(duì)對(duì)象的集合遍歷鍵值對(duì)對(duì)象的集合,獲取到每一個(gè)鍵值對(duì)對(duì)象遍歷鍵值對(duì)對(duì)象的集合,獲取到每一個(gè)鍵值對(duì)對(duì)象根據(jù)鍵值對(duì)對(duì)象找鍵和值根據(jù)鍵值對(duì)對(duì)象找鍵和值HashMap類概述類概述 HashMap類概述類概述鍵是哈希表結(jié)構(gòu),可以保證鍵的唯一性鍵是哈希表結(jié)構(gòu),可以保證鍵的唯一性

20、 HashMap案例案例HashMapHashMapHashMapHashMapLinkedHashMap類概述類概述 Map 接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)知的迭代順序。知的迭代順序。TreeMap類概述類概述 TreeMap類概述類概述鍵是紅黑樹(shù)結(jié)構(gòu),可以保證鍵的排序和唯一性鍵是紅黑樹(shù)結(jié)構(gòu),可以保證鍵的排序和唯一性 TreeMap案例案例HashMapHashMapMap集合案例集合案例 aababcabcdabcde,獲取字符串中每一個(gè)字獲取字符串中每一個(gè)字母出現(xiàn)的次數(shù)要求結(jié)果母出現(xiàn)的次數(shù)要求結(jié)果:a(5)b(4)c(3)d(2)e(1) 集合的嵌套遍歷集合的嵌套遍歷HashMap嵌套嵌套HashMapHashMap嵌套嵌套ArrayListArrayList嵌套嵌套HashMap面試題面試題 HashMap和和Hashtable的區(qū)別的區(qū)別 List,Set,Map等接口是否都繼承子等接口是否都繼承子Map接口接口Collections類和成員方法類和成員方法 Collections類概述類概述針對(duì)集合操作針對(duì)集合操作 的工具類的工具類 Collections成員方法成員方法pub

溫馨提示

  • 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)論