Java高級(jí)程序設(shè)計(jì) 集合框架 課件_第1頁
Java高級(jí)程序設(shè)計(jì) 集合框架 課件_第2頁
Java高級(jí)程序設(shè)計(jì) 集合框架 課件_第3頁
Java高級(jí)程序設(shè)計(jì) 集合框架 課件_第4頁
Java高級(jí)程序設(shè)計(jì) 集合框架 課件_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java高級(jí)程序設(shè)計(jì)Chapter_1:集合框架課程目標(biāo)《Java高級(jí)程序設(shè)計(jì)》是一門軟件專業(yè)的核心課程。通過課程教學(xué),使學(xué)生:學(xué)會(huì)J2SE部分的高級(jí)知識(shí)應(yīng)用實(shí)踐的全過程。掌握J(rèn)ava語言的高級(jí)特性,提高學(xué)生的開發(fā)能力。本章目標(biāo)了解Java2之前的容器類的繼承關(guān)系,熟練使用其中的類和接口。掌握J(rèn)ava集合框架,熟練使用其中的相關(guān)類和接口。掌握使用集合類的泛型用法。內(nèi)容進(jìn)度集合框架概述集合框架的迭代器Collecion<E>接口List結(jié)構(gòu)比較器Queue結(jié)構(gòu)Set結(jié)構(gòu)Map結(jié)構(gòu)Collections工具類Arrays工具類Java2之前的容器類在Java2之前,標(biāo)準(zhǔn)的Java類庫只能為最有用的數(shù)據(jù)結(jié)構(gòu)提供很小的一組類,我們通常稱之為“容器類”。容器類是由“兩條線”組成。Enumeration<E>接口

Enumeration接口是貫穿于整個(gè)Java2之前容器類的“迭代器”接口,定義了可以枚舉(遍歷)容器中元素的方法,只能單方向運(yùn)動(dòng)。成員方法:publicbooleanhasMoreElements()publicEnextElement()范例解析對(duì)于Enumeration接口來說,有一種通常的寫法,如:while(en.hasMoreElements()){Objectobj=en.nextElement();//其它操作}集合框架概述java.util包中包含了Java最強(qiáng)大的子系統(tǒng)之一,這就是“集合框架”?!凹峡蚣堋笔窃贘ava2初始版本中增加進(jìn)來的,Java2版本1.4和1.5中增強(qiáng)了它的功能。一個(gè)集合就是一組對(duì)象的容器。集合的加入導(dǎo)致了java.util中許多元素在構(gòu)造和體系結(jié)構(gòu)方面的根本變化,它也擴(kuò)展了能夠應(yīng)用的任務(wù)域。所以說,集合是所有Java程序員都需要密切關(guān)注并熟練掌握的一種技術(shù)。集合類層次關(guān)系Iterator<E>接口Iterator接口是集合框架中的單向迭代器。成員方法:publicbooleanhasNext()publicEnext()publicvoidremove()ListIterator<E>接口ListIterator是Iterator接口的子接口,是集合框架中的雙向迭代器。成員方法:publicbooleanhasPrevious()publicEprevious()publicvoidadd(Eobj)publicvoidset(Eobj)publicintnextIndex()publicintpreviousIndex()Collection<E>接口-1Collection接口是集合框架的基礎(chǔ),聲明了多數(shù)集合類都有的核心方法,因?yàn)槎鄶?shù)的集合都實(shí)現(xiàn)Collection接口,熟悉它的方法對(duì)清楚理解集合框架是非常必要的。成員方法:publicIterator<E>iterator()publicbooleanadd(Eo)publicbooleanaddAll(Collection<?extendsE>c)Collection<E>接口-2成員方法:publicbooleanremove(Objecto)publicbooleanremoveAll(Collection<?>c)publicbooleanretainAll(Collection<?>c)publicvoidclear()publicintsize()publicbooleanisEmpty()publicbooleanequals(Objecto)Collection<E>接口-3成員方法:publicbooleancontains(Objecto)publicbooleancontainsAll(Collection<?>c)其它方法參照API文檔。List結(jié)構(gòu)層次關(guān)系List<E>接口-1成員方法:publicListIterator<E>listIterator()publicListIterator<E>listIterator(intindex)publicvoidadd(intindex,Eelement)publicbooleanaddAll(intindex,Collection<?extendsE>c)publicEset(intindex,Eelement)publicEget(intindex)List<E>接口-2成員方法:publicList<E>subList(intfromIndex,inttoIndex)publicintindexOf(Objecto)publicintlastIndexOf(Objecto)Vector<E>類-1在編程中,經(jīng)常用數(shù)組來對(duì)一些數(shù)據(jù)進(jìn)行操作,不僅編程方便,而且效率高,但是,數(shù)組必須是定長(zhǎng)的,其元素類型必須一致,不能滿足動(dòng)態(tài)增元素和存放不同類型的元素的需要。java.util包中的Vector類正是用來處理這種情況的。Vector是線程安全的(ArrayList不是線程安全的)。構(gòu)造方法:publicVector()Vector<E>類-2構(gòu)造方法:publicVector(intinitialCapacity)publicVector(intinitialCapacity,intcapacityIncrement)publicVector(Collection<?extendsE>c)成員方法:publicintcapacity()publicintsize()Vector<E>類-3成員方法:publicvoidaddElement(Eobj)publicvoidinsertElementAt(Eobj,intindex)publicvoidsetElementAt(Eobj,intindex)publicbooleanremoveElement(Objectobj)publicvoidremoveElementAt(intindex)publicvoidremoveAllElements()Vector<E>類-4成員方法:publicEfirstElement()publicElastElement()publicEelementAt(intindex)publicbooleanisEmpty()publicbooleancontains(Objectelem)publicintindexOf(Objectelem)publicintindexOf(Objectelem,intindex)Vector<E>類-5成員方法:publicintlastIndexOf(Objectelem)publicintlastIndexOf(Objectelem,intindex)publicEnumeration<E>elements()publicbooleanequals(Objecto)publicObjectclone()publicvoidtrimToSize()publicvoidsetSize(intnewSize)Vector<E>類-6

上述方法都是在Java2之前的容類中出現(xiàn)的方法,因已將Vector納入集合框架,所以之前的方法也進(jìn)行了泛化處理。

練習(xí):(1)構(gòu)造一個(gè)Vector對(duì)象,存儲(chǔ)10個(gè)String對(duì)象和10個(gè)Integer對(duì)象,隨機(jī)存,要求輸出所有Integer對(duì)象封裝值的和、所有String對(duì)象連接一起的值。(2)構(gòu)造一個(gè)Vector對(duì)象,存儲(chǔ)10個(gè)Number對(duì)象,然后用泛型方法進(jìn)行迭代、求和。(分別用Enumeration和Iterator完成迭代操作)For(Objecto:vector){

if(oinstanceofjava.lang.Integer){…..}}Stack<E>類-1Stack類是實(shí)現(xiàn)了標(biāo)準(zhǔn)的后進(jìn)先出的堆棧,是Vector的子類,但是它的下標(biāo)是從1開始的(棧頂下標(biāo)為1,棧底下標(biāo)為size)。所以說Vector類所用到的方法Stack的方法都可以用,但是在實(shí)際應(yīng)用中,盡量不使用繼承來的方法。構(gòu)造方法:publicStack()Stack<E>類-2成員方法:publicEpush(Eitem)publicEpop()publicEpeek()publicbooleanempty()publicintsearch(Objecto)練習(xí):構(gòu)造一個(gè)Stack對(duì)象,測(cè)試入棧出棧操作。ArrayList<E>類ArrayList是底層以數(shù)組實(shí)現(xiàn)的List。構(gòu)造方法:publicArrayList()publicArrayList(intinitialCapacity)publicArrayList(Collection<?extendsE>c)成員方法:publicvoidtrimToSize()

練習(xí):創(chuàng)建一個(gè)ArrayList對(duì)象,測(cè)試添加元素、單向遍歷及雙向遍歷。CopyOnWriteArrayList<E>類ArrayList的一個(gè)線程安全的變體,其中所有可變操作(添加、設(shè)置,等等)都是通過對(duì)基礎(chǔ)數(shù)組進(jìn)行一次新的復(fù)制來實(shí)現(xiàn)的。構(gòu)造方法:publicCopyOnWriteArrayList()publicCopyOnWriteArrayList(Collection<?extendsE>c)publicCopyOnWriteArrayList(E[]toCopyIn)LinkedList<E>類-1LinkedList是底層以雙向鏈表實(shí)現(xiàn)的List。構(gòu)造方法:publicLinkedList()publicLinkedList(Collection<?extendsE>c)成員方法:publicvoidaddFirst(Eo)publicvoidaddLast(Eo)LinkedList<E>類-2成員方法:publicEgetFirst()publicEgetLast()publicEremoveFirst()publicEremoveLast()

練習(xí):創(chuàng)建一個(gè)LinkList,添加、插入、刪除元素的測(cè)試。比較器–Comparable<T>接口Comparable接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序。此排序被稱為該類的自然排序,類的

compareTo方法被稱為它的自然比較方法。成員方法:publicintcompareTo(To)比較器–Comparator<T>接口

比較方法強(qiáng)行對(duì)某些對(duì)象Collection進(jìn)行整體排序??梢詫?/p>

Comparator傳遞給

sort方法從而允許在排序順序上實(shí)現(xiàn)精確控制。還可以使用

Comparator來控制某些數(shù)據(jù)結(jié)構(gòu)(如

TreeSet或

TreeMap)的順序。成員方法:publicintcompare(To1,To2)publicbooleanequals(Objectobj)Queue結(jié)構(gòu)層次關(guān)系Queue<E>接口

Queue代表的是先進(jìn)先出的隊(duì)列,有如下行為:成員方法:publicbooleanoffer(Eelement)publicEremove()publicEpoll()publicEpeek()publicEelement()范例解析importjava.util.*;publicclassLinkedListQueueTest{ publicstaticvoidmain(String[]args){ Queue<Integer>q=newLinkedList<Integer>(); q.offer(1); q.offer(2); Iterator<Integer>iter=q.iterator(); while(iter.hasNext()){ Integeri=iter.next范例解析 System.out.println(i); } while(q.peek()!=null){//.OR.!q.isEmpty() Integeri=q.poll(); System.out.println(i); } }}BlockingQueue<E>接口-1

Queue接口有七個(gè)具體實(shí)現(xiàn)的子類,其中實(shí)現(xiàn)了BlockingQueue接口的五個(gè)“阻塞隊(duì)列類”和兩個(gè)“非阻塞隊(duì)列類”(PriorityQueue和

ConcurrentLinkedQueue)。成員方法:publicintdrainTo(Collection<?superE>c)publicintdrainTo(Collection<?superE>c,intmaxElements)BlockingQueue<E>接口-2成員方法:publicbooleanoffer(Eo,longtimeout,TimeUnitunit)throwsInterruptedExceptionpublicEpoll(longtimeout,TimeUnitunit)throwsInterruptedExceptionpublicvoidput(Eo)throwsInterruptedExceptionpublicEtake()throwsInterruptedExceptionpublicintremainingCapacity()BlockingQueue<E>接口-3BlockingQueue接口五個(gè)實(shí)現(xiàn)類分別是:(1)ArrayBlockingQueue(2)LinkedBlockingQueue(3)PriorityBlockingQueue(4)DelayQueue(5)SynchronousQueueSet結(jié)構(gòu)層次關(guān)系Set中元素是無序的,是不重復(fù)的。元素相同的條件是:1)equals相等。2)hashCode值相等。HashSet<E>類-1HashSet擴(kuò)展AbstractSet并且實(shí)現(xiàn)Set接口。它創(chuàng)建一個(gè)使用哈希表存儲(chǔ)的集合。哈希表是通過使用稱為散列法的機(jī)制來存儲(chǔ)信息的。在散列法中,鍵的信息內(nèi)容用于確定一個(gè)唯一的值,稱為它的哈希碼(散列碼)。然后哈希碼作為與鍵相關(guān)的數(shù)據(jù)存儲(chǔ)之處的索引使用。鍵到它的哈希碼的轉(zhuǎn)化是自動(dòng)完成的,我們不會(huì)看到哈希碼本身,同樣,哈希碼也不能直接索引哈希表。HashSet<E>類-2構(gòu)造方法:publicHashSet()publicHashSet(intinitialCapacity)publicHashSet(intinitialCapacity,floatloadFactor)publicHashSet(Collection<?extendsE>c)

練習(xí):創(chuàng)建一個(gè)HashSet,添加元素后遍歷,觀察順序與添加順序是否一致。SortedSet<E>接口SortedSet接口是Set接口的子接口,功能是保證集合中元素始終處于“升”序的狀態(tài)。成員方法:publicComparator<?superE>comparator()publicEfirst()publicElast()publicSortedSet<E>headSet(EtoElement)publicSortedSet<E>subSet(EfromElement,EtoElement)publicSortedSet<E>tailSet(EfromElement)TreeSet<E>類-1TreeSet類的底層結(jié)構(gòu)為樹的一種有序的Set。對(duì)象以升序順序存儲(chǔ),訪問和遍歷它的時(shí)間很快,這使得TreeSet成為存儲(chǔ)大量必須能很快查找的排序信息的很好選擇。構(gòu)造方法:publicTreeSet()publicTreeSet(Collection<?extendsE>c)publicTreeSet(Comparator<?superE>c)publicTreeSet(SortedSet<E>s)TreeSet<E>類-2練習(xí):構(gòu)造一個(gè)TreeSet,存放一批Integer對(duì)象,遍歷查看結(jié)果。練習(xí):自定義一個(gè)Comparator比較器,存放Integer對(duì)象,實(shí)現(xiàn)簡(jiǎn)單倒序排列。Map結(jié)構(gòu)層次關(guān)系Map.Entry<K,V>接口-1

Map.Entry是Map接口的內(nèi)部接口,它的功能是:封裝一個(gè)key/value,也就是說,一個(gè)Map.Entry對(duì)象就是一個(gè)鍵/值對(duì)。每個(gè)Map集合元素是一個(gè)Map.Entry對(duì)象。成員方法:publicKgetKey()publicVgetValue()publicVsetValue(Vvalue)Map.Entry<K,V>接口-2成員方法:publicbooleanequals(Objecto)publicinthashCode()Map<K,V>接口-1Map接口是將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射一個(gè)值。此接口用于代替Java2之前容器類的Dictionary類,后者完全是一個(gè)抽象類,而不是一個(gè)接口。成員方法:publicVput(Kkey,Vvalue)publicvoidputAll(Map<?extendsK,?extendsV>t)Map<K,V>接口-2成員方法:publicVget(Objectkey)publicVremove(Objectkey)publicvoidclear()publicintsize()publicbooleancontainsKey(Objectkey)publicbooleancontainsValue(Objectvalue)publicbooleanisEmpty()Map<K,V>接口-3成員方法:publicSet<Map.Entry<K,V>>entrySet()publicSet<K>keySet()publicCollection<V>values()HashMap<K,V>類-1HashMap是一個(gè)基于散列表完成的一個(gè)實(shí)現(xiàn)品,可以用它來取代Hashtable。構(gòu)造方法:publicHashMap()publicHashMap(intinitialCapacity)publicHashMap(intinitialCapacity,floatloadFactor)publicHashMap(Map<?extendsK,?extendsV>m)HashMap<K,V>類-2

練習(xí):構(gòu)造一個(gè)HashMap,加入一些String,用兩種方法實(shí)現(xiàn)遍歷,一是用entrySet方法,一種是用keySet方法。SortedMap<K,V>接口-1SortedMap接口是Map接口的子接口,功能是保證集合中鍵/值對(duì)始終處于按鍵排列“升”序的狀態(tài)。成員方法:publicComparator<?superK>comparator()publicKfirstKey()publicKlastKey()SortedMap<K,V>接口-2成員方法:publicSortedMap<K,V>headMap(KtoKey)publicSortedMap<K,V>subMap(KfromKey,KtoKey)publicSortedMap<K,V>tailMap(KfromKey)TreeMap<K,V>類-1TreeMap是底層基于樹完成的一個(gè)Map。當(dāng)我們遍歷它時(shí),會(huì)以排序形式出現(xiàn),次序由Comparable或Comparator比較器決定。構(gòu)造方法:publicTreeMap()publicTreeMap(Map<?extendsK,?extendsV>m)publicTreeMap(Comparator<?superK>c)publicTreeMap(SortedMap<K,?extendsV>m)TreeMap<K,V>類-2

練習(xí):構(gòu)造一個(gè)TreeMap,存放一批Integer/String對(duì)象,遍歷查看結(jié)果。

練習(xí):自定義一個(gè)Comparator比較器,存放Integer對(duì)象,實(shí)現(xiàn)簡(jiǎn)單倒序排列。其它Map接口的實(shí)現(xiàn)類在集合框架中,還有幾個(gè)Map接口的實(shí)現(xiàn)類,請(qǐng)自行參照API文檔做練習(xí)。

(1)IdentityHashMap(2)WeakHashMap(3)EnumMap(4)ConcurrentMap(5)ConcurrentHashMapDictionary<K,V>類-1Dictionary從字面上理解為“字典”,是一個(gè)表示鍵/值對(duì)存儲(chǔ)庫的抽象類,代表的數(shù)據(jù)結(jié)構(gòu)為映射。我們可以將給定一個(gè)鍵和值存儲(chǔ)到Dictionary對(duì)象中。一旦被存儲(chǔ),可以通過它的鍵映射到它的值。構(gòu)造方法:publicDictionary()Dictionary<K,V>類-2成員方法:publicabstractVput(Kkey,Vvalue)publicabstractVget(Objectkey)publicabstractVremove(Objectkey)publicabstractintsize()publicabstractbooleanisEmpty()publicabstractEnumeration<K>keys()publicabstractEnumeration<V>elements()Hashtable<K,V>類-1Hashtable是原始util包的一部分,是Dictionary的具體實(shí)現(xiàn)。當(dāng)使用Hashtable時(shí),你指定一個(gè)對(duì)象作為一個(gè)鍵,另外指定一個(gè)與那個(gè)鍵關(guān)聯(lián)的值。然后鍵被散列,相應(yīng)的散列碼用做值存儲(chǔ)在表中的索引。構(gòu)造方法:publicHashtable()publicHashtable(intinitialCapacity)Hashtable<K,V>類-2構(gòu)造方法:publicHashtable(intinitialCapacity,floatloadFactor)publicHashtable(Map<?extendsK,?extendsV>t)成員方法:publicbooleanisEmpty()publicbooleancontains(Objectvalue)Hashtable<K,V>類-3成員方法:publicbooleancontainsKey(Objectkey)publicvoidclear()publicObjectclone()練習(xí):構(gòu)造Hashtable對(duì)象,測(cè)試其成員方法。HashtableHashtablekey不可以為null.HashMap

key可以為null.Hashtable

中的方法是同步方法,線程安全的。HashMap不是線程安全的。Properties類-1Properties是屬性表,是Hashtable類的一個(gè)子類,是一種特殊的映射結(jié)構(gòu)。鍵和值必須是String。還可以將屬性表保存到一個(gè)文件,也可以從一個(gè)文件那里加載。構(gòu)造方法:publicProper

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論