《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》課件-項(xiàng)目5 使用集合_第1頁
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》課件-項(xiàng)目5 使用集合_第2頁
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》課件-項(xiàng)目5 使用集合_第3頁
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》課件-項(xiàng)目5 使用集合_第4頁
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》課件-項(xiàng)目5 使用集合_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目5使用集合Java程序設(shè)計(jì)項(xiàng)目描述

/

Projectdescription本項(xiàng)目通過模擬學(xué)生管理系統(tǒng)、模擬用戶注冊(cè)、模擬商超模塊購物車三個(gè)任務(wù),講解如何選用合適的集合來存儲(chǔ)不同的數(shù)據(jù),從而了解List集合、Set集合、Map集合的具體應(yīng)用。使用List存儲(chǔ)數(shù)據(jù)任務(wù)1Java集合概述Java集合類是指Java中設(shè)計(jì)用于容納對(duì)象的各種數(shù)據(jù)結(jié)構(gòu),通常也稱為容器類。Java集合框架則是指由Java集合類以及相關(guān)操作構(gòu)成的體系結(jié)構(gòu),包含接口、接口的實(shí)現(xiàn)類和對(duì)集合運(yùn)算的算法,如右圖:Collection接口方法描述booleanadd(Objecto)向集合中添加一個(gè)元素booleanaddAll(Collectionc)將指定collection中的所有元素都添加到集合中voidclear()移除集合中的所有元素booleanremove(Object

o)在集合中移除指定的元素booleanisEmpty()判斷集合是否為空Iterator

iterator()迭代器,用于遍歷集合中的元素intsize()集合中成員的個(gè)數(shù)booleancontains(Objecto)判斷集合中是否包含元素oCollection接口是List和Set的父接口,在Collection中定義了通用的一些方法用于操作List和Set集合的增刪改查操作。特點(diǎn):(1)List元素有序且可重復(fù)。(2)List可以精確控制元素的插入位置或刪除指定位置的元素。List接口方法描述booleanadd(int

index,Object

element)在集合的index處插入元素elementbooleanaddAll(intindex,Collectionc)將指定collection中的所有元素都添加到集合的index處Objectget(intindex)獲取集合index處的元素Objectremove(intindex)在集合中移除index處的元素Objectset(intindex,Objectelement)將集合中index處的元素替換成elementIntindexOf(Objecto)返回對(duì)象o在集合中的位置索引IntlastIndexOf(Objecto)返回對(duì)象o在集合中的最后一次出現(xiàn)的位置索引ListsubList(intfromindex,inttoindex)返回從索引fromindex(包括)到toindex(不包括)處所有元素集合組成的子集合它總是至少等于列表的大小,隨著向ArrayList中不斷添加元素,其容量也自動(dòng)增長。ArrayList

集合LinkedList

集合List接口的另一個(gè)實(shí)現(xiàn)類是LinkedList,該集合內(nèi)部維護(hù)了一個(gè)雙向循環(huán)的鏈表。方法描述voidaddFirst(Object

o)在集合的開頭插入元素ovoidaddLast(Object

o)在集合的插入元素oObjectgetFirst()獲取集合第一個(gè)元素ObjectgetLast()獲取集合最后一個(gè)元素ObjectremoveFirst()移除集合中第一個(gè)元素ObjectremoveLast()移除集合中最后一個(gè)元素ArrayList允許快速訪問元素,但是在插入和刪除元素時(shí)會(huì)造成元素大量移動(dòng)。LinkedList的每一個(gè)元素都使用引用的方式來記住它的前后一個(gè)元素,從而可以將所有的元素連接起來,添加和刪除都只需要改變引用關(guān)系。Iterator接口Iterator接口主要用于迭代訪問(即遍歷)Collection中的元素,又稱為迭代器。它僅提供三個(gè)方法:hashNext()、next()、remove()。1、當(dāng)調(diào)用集合的iterator()時(shí)就會(huì)獲得一個(gè)迭代器對(duì)象,該對(duì)象指向集合第一個(gè)元素的前面;2、通過hasNext()判斷集合中是否有下一個(gè)元素,如果有就用next()取出該元素,如果沒有則說明遍歷到了集合的尾部;3、remove()則是用來通過迭代器刪除集合中的成員的。Iterator接口需要特別說明的是,當(dāng)通過迭代器獲取ArrayList集合中的元素時(shí),此時(shí)這些元素都被當(dāng)成Object類型,如果想得到特定類型的元素,則需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。Iterator接口在使用迭代器Iterator對(duì)集合中的元素進(jìn)行迭代時(shí),如果同時(shí)調(diào)用了集合對(duì)象的add或remove的方法,會(huì)出現(xiàn)異常。這個(gè)異常出現(xiàn)的原因是集合中刪除了元素會(huì)導(dǎo)致迭代器預(yù)期的迭代次數(shù)發(fā)生改變,導(dǎo)致迭代器的結(jié)果不準(zhǔn)確。

解決方式如下:迭代器可以改成專門針對(duì)List集合特有的ListIterator,該迭代器本身多了一個(gè)add的方法,這樣就可以不用集合的add的方法了forEach遍歷(1)foreach循環(huán)來遍歷數(shù)組或集合中的元素,語法如下:(2)foreach循環(huán)會(huì)自動(dòng)遍歷容器中的每個(gè)元素,代碼如下:任務(wù)實(shí)施任務(wù)分析學(xué)生管理系統(tǒng)首頁及每個(gè)功能的具體要求如下。系統(tǒng)首頁:用于顯示系統(tǒng)所有的操作,并根據(jù)用戶在控制臺(tái)的輸入選擇需要使用的功能。查詢功能:用于選擇該功能后,在控制臺(tái)打印所有學(xué)生的信息。添加功能:用戶選擇該功能后,要求用戶在控制臺(tái)輸入學(xué)生學(xué)號(hào)、姓名、年齡和居住地的基本信息。在輸入學(xué)號(hào)時(shí),判斷學(xué)號(hào)是否被占用,如果被占用則添加失敗,并給出相應(yīng)的提示;返之則提示添加成功。刪除功能:用戶選擇該功能后,提示用戶在控制臺(tái)輸入需要?jiǎng)h除的學(xué)生的學(xué)號(hào),如果用戶輸入的學(xué)號(hào)存在則提示刪除成功,返之則提示刪除失敗。修改功能:用戶選擇該功能后,提示用戶在控制臺(tái)輸入需要?jiǎng)h除的學(xué)生的學(xué)號(hào)、姓名、年齡和居住地學(xué)生信息,并使用輸入的學(xué)生學(xué)號(hào)判斷是否有此人,如果有則修改原有的學(xué)生信息,反之則提示需要修改的學(xué)分信息不存在。退出功能:用戶選擇該功能后,程序正常關(guān)閉。任務(wù)實(shí)施編寫代碼詳細(xì)代碼請(qǐng)參考配書代碼運(yùn)行結(jié)果使用Set模擬數(shù)據(jù)任務(wù)2Set接口(1)集合框架中的Set指Set接口和所有Set接口的實(shí)現(xiàn)類,它們都繼承自Collection。其特點(diǎn)是元素?zé)o序,不可重復(fù)。(2)須要注意的是,加入Set的每個(gè)元素都必須是唯一的。Set通過集合中的對(duì)象的equals()方法來判斷對(duì)象的唯一性,所以,加人Set的對(duì)象必須重寫Object中的equals()方法。

(3)Set常用的實(shí)現(xiàn)類有HashSet和TreeSet。HashSet

HashSet用了“專為快速查找而設(shè)計(jì)”的散列函數(shù)hashcode(),通過對(duì)象的hashcode()決定存放的位置。添加對(duì)象計(jì)算哈希值判斷重復(fù)哈希值相同hashcode()equals()確定位置從代碼運(yùn)行過程來看,當(dāng)往HashSet中存放重復(fù)的”def”元素時(shí),先用HashCode()得到對(duì)象的地址,發(fā)現(xiàn)這個(gè)地址有存放元素時(shí),再用equals()判斷是否兩個(gè)對(duì)象值是否相等,如果相等則認(rèn)為是重復(fù)元素,那存放失敗,add方法的返回值為false。(1)HashSet(2)上頁代碼是把String類對(duì)象存入HashSet,String類有重寫過equals()和hashcode(),所以不能把重復(fù)的String對(duì)象存入HashSet,但是如果將案例中的Person對(duì)象存入HashSet時(shí),結(jié)果又如何呢?HashSet(3)現(xiàn)在來改寫Person類,假設(shè)名字相同并且號(hào)碼相同的就是同一個(gè)學(xué)生,Person類添加以下方法:TreeSetTreeSet是一個(gè)有序的Set,其底層采用二叉樹的原理進(jìn)行排序,因此放到TreeSet集合中的對(duì)象是可以排序的,并用到了集合框架提供的另外兩個(gè)實(shí)用接口Comparable和Comparator。一個(gè)類是可排序的,它就應(yīng)該實(shí)現(xiàn)Comparable接口;如果需要多個(gè)類具有相同的排序算法,那就不需要在每個(gè)類分別重復(fù)定義相同的排序算法,只要實(shí)現(xiàn)Comparator接口即可。TreeSet從運(yùn)行結(jié)果來看,出現(xiàn)ClassCastException類型轉(zhuǎn)換出錯(cuò),原因是Person類沒有實(shí)現(xiàn)Comparable接口,從而沒有實(shí)現(xiàn)比較規(guī)則,而TreeSet因?yàn)橛信判蚬δ埽?dāng)把一個(gè)沒有比較規(guī)則的對(duì)象加入TreeSet集合時(shí)就會(huì)報(bào)錯(cuò)。TreeSet要解決上述問題,讓Person類實(shí)現(xiàn)Comparable接口,重寫compareTo()方法。(1)改寫Person類,重寫compareTo()方法,比較規(guī)則是按name升序排序。(左圖)(2)把Person對(duì)象放入TreeSet中,可以看到Person對(duì)象因?yàn)橛辛吮容^規(guī)則,能存放進(jìn)TreeSet集合中了,同時(shí)也實(shí)現(xiàn)了按名字升序排序。(右圖)任務(wù)實(shí)施任務(wù)分析模擬用戶注冊(cè)要求用戶首先輸入用戶名、密碼、確認(rèn)密碼、生日(格式為yyyy-mm-dd為正確)、手機(jī)號(hào)(手機(jī)長度為11位為正確)、郵箱(包含符號(hào)“@”為正確)信息,判斷信息正確后,驗(yàn)證用戶是否重復(fù)、重復(fù)則給出相應(yīng)的提示,如果不重復(fù)則注冊(cè)成功。案例要求使用HashSet集合實(shí)現(xiàn)。任務(wù)實(shí)施編寫代碼詳細(xì)代碼請(qǐng)參考配書代碼運(yùn)行結(jié)果使用Map存儲(chǔ)數(shù)據(jù)任務(wù)3Map接口(1)Map接口沒有繼承自Collection,用于保存具有“映射關(guān)系”的“鍵值對(duì)”數(shù)據(jù)。(2)鍵是key,值是value,key和value都可以是任何引用類型的數(shù)據(jù)Map的key不允許重復(fù),即同一個(gè)Map對(duì)象的任何兩個(gè)key通過equals()比較的結(jié)果總是返回false。(3)Map接口中常用的實(shí)現(xiàn)類有HashMap和TreeMap。方法描述voidclear()從該地圖中刪除所有的映射(可選操作)。booleancontainsKey(Object

key)如果此映射包含指定鍵的映射,則返回trueSet<Map.Entry<K,V>>entrySet()返回此地圖中包含的映射的Set視圖V

get(Object

key)返回到指定鍵所映射的值,或null如果此映射包含該鍵的映射booleanisEmpty()如果此地圖不包含鍵值映射,則返回trueSet<K>keySet()返回此地圖中包含的鍵的Set視圖V

put(K

key,V

value)將指定的值與該映射中的指定鍵相關(guān)聯(lián)V

remove(Object

key)如果存在(從可選的操作),從該地圖中刪除一個(gè)鍵的映射Collection<V>values()返回此地圖中包含的值的Collection視圖HashMapHashMap是Map接口的一個(gè)實(shí)現(xiàn)類,它底層用哈希表的方式存儲(chǔ)鍵值映射關(guān)系,不能出現(xiàn)重復(fù)的鍵。當(dāng)向Map中存儲(chǔ)相同的key時(shí),后添加的值替換掉了前面的值,這也證實(shí)了Map中的鍵必須是唯一的,不能重復(fù)。HashMap在程序的開發(fā)中,經(jīng)常需要獲取Map中所有的值,有四種方法可以實(shí)現(xiàn):任務(wù)實(shí)施任務(wù)分析本任務(wù)開發(fā)一個(gè)模擬商超購物的購物車程序,主要功能包括:(1) 購物車可以實(shí)現(xiàn)商品的購買、刪除、修改商品數(shù)量和清空購物車的功能,以HashMap的形式存儲(chǔ)購物車中的相關(guān)數(shù)據(jù)。(2) 每次購買默認(rèn)購買的商品

溫馨提示

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