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

下載本文檔

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

文檔簡介

項目5使用集合Java程序設(shè)計項目描述

/

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

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

iterator()迭代器,用于遍歷集合中的元素intsize()集合中成員的個數(shù)booleancontains(Objecto)判斷集合中是否包含元素oCollection接口是List和Set的父接口,在Collection中定義了通用的一些方法用于操作List和Set集合的增刪改查操作。特點:(1)List元素有序且可重復。(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)返回對象o在集合中的位置索引IntlastIndexOf(Objecto)返回對象o在集合中的最后一次出現(xiàn)的位置索引ListsubList(intfromindex,inttoindex)返回從索引fromindex(包括)到toindex(不包括)處所有元素集合組成的子集合它總是至少等于列表的大小,隨著向ArrayList中不斷添加元素,其容量也自動增長。ArrayList

集合LinkedList

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

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

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

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

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

HashSet用了“專為快速查找而設(shè)計”的散列函數(shù)hashcode(),通過對象的hashcode()決定存放的位置。添加對象計算哈希值判斷重復哈希值相同hashcode()equals()確定位置從代碼運行過程來看,當往HashSet中存放重復的”def”元素時,先用HashCode()得到對象的地址,發(fā)現(xiàn)這個地址有存放元素時,再用equals()判斷是否兩個對象值是否相等,如果相等則認為是重復元素,那存放失敗,add方法的返回值為false。(1)HashSet(2)上頁代碼是把String類對象存入HashSet,String類有重寫過equals()和hashcode(),所以不能把重復的String對象存入HashSet,但是如果將案例中的Person對象存入HashSet時,結(jié)果又如何呢?HashSet(3)現(xiàn)在來改寫Person類,假設(shè)名字相同并且號碼相同的就是同一個學生,Person類添加以下方法:TreeSetTreeSet是一個有序的Set,其底層采用二叉樹的原理進行排序,因此放到TreeSet集合中的對象是可以排序的,并用到了集合框架提供的另外兩個實用接口Comparable和Comparator。一個類是可排序的,它就應該實現(xiàn)Comparable接口;如果需要多個類具有相同的排序算法,那就不需要在每個類分別重復定義相同的排序算法,只要實現(xiàn)Comparator接口即可。TreeSet從運行結(jié)果來看,出現(xiàn)ClassCastException類型轉(zhuǎn)換出錯,原因是Person類沒有實現(xiàn)Comparable接口,從而沒有實現(xiàn)比較規(guī)則,而TreeSet因為有排序功能,當把一個沒有比較規(guī)則的對象加入TreeSet集合時就會報錯。TreeSet要解決上述問題,讓Person類實現(xiàn)Comparable接口,重寫compareTo()方法。(1)改寫Person類,重寫compareTo()方法,比較規(guī)則是按name升序排序。(左圖)(2)把Person對象放入TreeSet中,可以看到Person對象因為有了比較規(guī)則,能存放進TreeSet集合中了,同時也實現(xiàn)了按名字升序排序。(右圖)任務實施任務分析模擬用戶注冊要求用戶首先輸入用戶名、密碼、確認密碼、生日(格式為yyyy-mm-dd為正確)、手機號(手機長度為11位為正確)、郵箱(包含符號“@”為正確)信息,判斷信息正確后,驗證用戶是否重復、重復則給出相應的提示,如果不重復則注冊成功。案例要求使用HashSet集合實現(xiàn)。任務實施編寫代碼詳細代碼請參考配書代碼運行結(jié)果使用Map存儲數(shù)據(jù)任務3Map接口(1)Map接口沒有繼承自Collection,用于保存具有“映射關(guān)系”的“鍵值對”數(shù)據(jù)。(2)鍵是key,值是value,key和value都可以是任何引用類型的數(shù)據(jù)Map的key不允許重復,即同一個Map對象的任何兩個key通過equals()比較的結(jié)果總是返回false。(3)Map接口中常用的實現(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)如果存在(從可選的操作),從該地圖中刪除一個鍵的映射Collection<V>values()返回此地圖中包含的值的Collection視圖HashMapHashMap是Map接口的一個實現(xiàn)類,它底層用哈希表的方式存儲鍵值映射關(guān)系,不能出現(xiàn)重復的鍵。當向Map中存儲相同的key時,后添加的值替換掉了前面的值,這也證實了Map中的鍵必須是唯一的,不能重復。HashMap在程序的開發(fā)中,經(jīng)常需要獲取Map中所有的值,有四種方法可以實現(xiàn):任務實施任務分析本任務開發(fā)一個模擬商超購物的購物車程序,主要功能包括:(1) 購物車可以實現(xiàn)商品的購買、刪除、修改商品數(shù)量和清空購物車的功能,以HashMap的形式存儲購物車中的相關(guān)數(shù)據(jù)。(2) 每次購買默認購買的商品

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論