《Java高級(jí)程序設(shè)計(jì)》課件-學(xué)習(xí)情境2 接口_第1頁(yè)
《Java高級(jí)程序設(shè)計(jì)》課件-學(xué)習(xí)情境2 接口_第2頁(yè)
《Java高級(jí)程序設(shè)計(jì)》課件-學(xué)習(xí)情境2 接口_第3頁(yè)
《Java高級(jí)程序設(shè)計(jì)》課件-學(xué)習(xí)情境2 接口_第4頁(yè)
《Java高級(jí)程序設(shè)計(jì)》課件-學(xué)習(xí)情境2 接口_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

List接口一、應(yīng)用場(chǎng)景二、List接口三、ArrayList常用方法四、List一般用法本學(xué)習(xí)情境主要內(nèi)容3一、應(yīng)用場(chǎng)景涉及到“?!?、“隊(duì)列”、“鏈表”等操作,應(yīng)該考慮使用List集合。二、List接口List接口繼承自Collection接口,是單列集合的一個(gè)重要分支,習(xí)慣性地將實(shí)現(xiàn)了List接口的對(duì)象稱(chēng)為L(zhǎng)ist集合。2.1List接口List集合中允許出現(xiàn)重復(fù)的元素;List集合中所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的;List集合中的元素可以通過(guò)索引(順序號(hào):元素在集合中處于的位置信息)來(lái)訪問(wèn);List集合中的元素是有序的,即元素的存入順序和取出順序一致。List接口特點(diǎn)2.2List接口的實(shí)現(xiàn)類(lèi)List接口的實(shí)現(xiàn)類(lèi)主要有:ArrayListLinkedListVectorStack1.ArrayList集合java.util.ArrayList是基于數(shù)組實(shí)現(xiàn)的非線程安全的集合。它由數(shù)組實(shí)現(xiàn),隨機(jī)訪問(wèn)效率高。ArrayList是最常用的集合。特點(diǎn):元素增刪慢,但查找快。適合場(chǎng)景:適合經(jīng)常查詢(xún)數(shù)據(jù)、遍歷數(shù)據(jù)的場(chǎng)合。由于日常開(kāi)發(fā)中使用最多的功能為查詢(xún)數(shù)據(jù)、遍歷數(shù)據(jù),所以ArrayList是最常用的集合。2.LinkedList集合java.util.LinkedList是基于鏈表實(shí)現(xiàn)的非線程安全的集合。特點(diǎn):元素增刪快,但查找慢適合場(chǎng)景:適合經(jīng)常添加元素、刪除元素的場(chǎng)合。在開(kāi)發(fā)時(shí),LinkedList集合也可以作為堆棧,隊(duì)列或雙端隊(duì)列的結(jié)構(gòu)使用3.VectorVector是基于數(shù)組實(shí)現(xiàn)的線程安全的集合。線程同步(方法被synchronized修飾),性能比ArrayList差。但是ArrayList是非線程安全的,而Vector是線程安全的。4.StackStack是棧,它繼承于Vector。它的特性是:先進(jìn)后出(FILO,FirstInLastOut)。2.3List接口實(shí)現(xiàn)類(lèi)的適用場(chǎng)合(1)對(duì)于需要快速插入,刪除元素,應(yīng)該使用LinkedList。(2)對(duì)于需要快速隨機(jī)訪問(wèn)元素,應(yīng)該使用ArrayList。(3)對(duì)于單線程環(huán)境,應(yīng)該使用非同步的類(lèi)ArrayList。(4)對(duì)于多線程環(huán)境,應(yīng)該使用同步的類(lèi)Vector。三、ArrayList常用方法方法摘要返回值類(lèi)型方法名說(shuō)明booleanadd(Ee)將指定的元素添加到此列表的尾部voidadd(intindex,Eelement)將指定的元素插入此列表中的指定位置Objectremove(intindex)移除此列表中指定位置上的元素booleanremove(Objecto)移除此列表中首次出現(xiàn)的指定元素(如果存在)Objectset(intindex,Objectobj)用指定的元素替代此列表中指定位置上的元素Objectget(intindex)返回此列表中指定位置上的元素intindexOf(Objectobj)返回此列表中首次出現(xiàn)的指定元素的索引,或如果此列表不包含元素,則返回-1intlastIndexOf(Objectobj)返回此列表中最后一次出現(xiàn)的指定元素的索引,或如果此列表不包含索引,則返回-1四、List接口一般用法List是接口,在使用List集合時(shí),通常使用其實(shí)現(xiàn)類(lèi)通過(guò)new來(lái)創(chuàng)建一個(gè)List集合對(duì)象。由于List使用了泛型,在實(shí)例化時(shí)是需傳遞類(lèi)型參數(shù)的。1.創(chuàng)建一個(gè)List接口的對(duì)象//使用ArrayList類(lèi)實(shí)例化List集合List<Student>studentList=newArrayList<Student>();

ArrayLIst使用了泛型,實(shí)例化時(shí)傳遞一個(gè)類(lèi)型參數(shù)3.刪除指定位置的元素studentList.remove(1);2.向list中存值studentList.add(“張三”);studentList.set(1,“李四”);//設(shè)置索引位置為1的對(duì)象e修改4.遍歷Listfor(Stringstu:studentList){System.out.println(stu.toString());}使用增強(qiáng)for循環(huán)遍歷小結(jié)List接口繼承自Collection接口,是單列集合。List集合中的元素是有序、可重復(fù)。List接口的實(shí)現(xiàn)類(lèi)主要有ArrayList,LinkedList,Vector,Stack等。List是接口,使用其實(shí)現(xiàn)類(lèi)通過(guò)new實(shí)例化一個(gè)對(duì)象。通過(guò)對(duì)象調(diào)用其實(shí)例方法實(shí)現(xiàn)CRUD操作。使用增強(qiáng)for循環(huán)實(shí)現(xiàn)遍歷List集合。List接口的使用實(shí)例一、任務(wù)描述二、任務(wù)分析設(shè)計(jì)三、任務(wù)實(shí)施四、運(yùn)行結(jié)果

本學(xué)習(xí)情境主要內(nèi)容19一、任務(wù)描述使用List存取用戶(hù)信息,并做CRUD即增刪改查操作。任務(wù)需求:定義用戶(hù)類(lèi)User。使用ArrayList集合類(lèi),存取用戶(hù)信息。做CRUD操作。使用多種方式遍歷該集合。二、任務(wù)分析、設(shè)計(jì)首先定義一個(gè)實(shí)體類(lèi)User封裝用戶(hù)的基本信息,然后采用List集合進(jìn)行存儲(chǔ)。由于List是一個(gè)接口,需要使用它的實(shí)現(xiàn)類(lèi)來(lái)創(chuàng)建集合對(duì)象,通過(guò)該對(duì)象的方法實(shí)現(xiàn)對(duì)用戶(hù)基本信息的CURD操作。其類(lèi)圖如圖2-1所示三、任務(wù)實(shí)施1.定義User類(lèi)publicclassUser{Stringname;Stringemail;PublicUser(Stringname,Stringemail){ =name;

this.email=email;}//省略setter和getter方法}封裝屬性、方法、構(gòu)造函數(shù)等2.創(chuàng)建測(cè)試類(lèi)創(chuàng)建測(cè)試類(lèi)UserListTest,在main()方法中實(shí)現(xiàn)CRUD功能。第一步,創(chuàng)建list對(duì)象userList這里使用List接口的實(shí)現(xiàn)類(lèi)ArrayList類(lèi)通過(guò)new來(lái)創(chuàng)建,由于List采用了泛型,需要傳遞User類(lèi)參數(shù)第二步,向集合中添加元素。userList.add(newUser("小明","xiaoming@"));Userxiaozhang=newUser("小張","xiaozhang@");userList.add(xiaozhang);首先創(chuàng)建User的對(duì)象,再調(diào)用list集合的add()方法向List集合的尾部或指定位置添加指定的元素首先創(chuàng)建User的對(duì)象,再調(diào)用list集合的set()方法替換列表中指定位置的元素Userxiaohu=newUser("小胡","xiaohu@");userList.set(1,xiaohu);第三步,替換元素調(diào)用list集合的remove(intindex)方法移除列表中指定位置的元素//移除列表中的元素userList.remove(1);第四步,移除列表中的元素第五步,使用列表迭代器//列表迭代器的用法。listIterator()方法返回此列表元素的列表迭代器。ListIterator<User>iterator=userList.listIterator();Useru=iterator.next();System.out.println(u.toString());System.out.println("后面還有沒(méi)有元素?"+iterator.hasNext());首選調(diào)用list集合的listIterator()方法返回此列表元素的列表迭代器。然后使用迭代器的hasNext()和next()方法來(lái)處理集合。hasNext()方法,如果迭代器具有更多元素,則返回true。next()方法,返回迭代器中的下一個(gè)元素。利用迭代器最大的好處就程序員不用再去為了索引越界等等異常所苦惱了,只需在迭代過(guò)程中對(duì)列表元素進(jìn)行操作即可。第六步,遍歷list集合有多種方法遍歷list集合方法1:使用迭代器,進(jìn)行循環(huán)遍歷for(Iterator<User>it1=userList.iterator();it1.hasNext();){ Useruser=it1.next();

System.out.println(user.toString());}首選調(diào)用userList.iterator()方法生成迭代器,然后使用for循環(huán)調(diào)用迭代器的hashNext、next方法,遍歷集合中的元素方法2:使用增強(qiáng)for循環(huán)for(元素類(lèi)型T元素變量x:集合對(duì)象){引用了x的java語(yǔ)句;

}增強(qiáng)for循環(huán)語(yǔ)句格式如下for(Usertmp:userList){

System.out.println(tmp.toString());}例如增強(qiáng)for循環(huán)是for語(yǔ)句的特殊簡(jiǎn)化版本,相對(duì)于for來(lái)說(shuō)方便了對(duì)容器的遍歷。在遍歷數(shù)組、集合方面,foreach為開(kāi)發(fā)人員提供了極大的方便。習(xí)慣上將這種特殊的for語(yǔ)句格式稱(chēng)之為“foreach”語(yǔ)句,即“for每一個(gè)”的意思。foreach并不是一個(gè)關(guān)鍵字。此方法需重點(diǎn)掌握。這種方法在遍歷數(shù)組和Map集合的時(shí)候同樣適用。方法3:使用List集合的get(i)方法進(jìn)行for循環(huán)遍歷,獲取集合中的每個(gè)元素for(inti=0;i<list.size();i++){

System.out.println(userList.get(i).toString());}for循環(huán)控制下標(biāo)從0到size()長(zhǎng)度,通過(guò)調(diào)用list集合的get()方法,來(lái)獲取每一個(gè)元素四、運(yùn)行結(jié)果這是最后的運(yùn)行結(jié)果,CRUD均操作成功小結(jié)本學(xué)習(xí)情境通過(guò)一個(gè)實(shí)例講述了:List集合的基本使用,包括使用其實(shí)現(xiàn)類(lèi)創(chuàng)建List對(duì)象向list集合中添加元素從list集合中刪除元素替換集合中指定位置的元素迭代器的使用幾種遍歷方法等等更多的和更為詳細(xì)的方法調(diào)用請(qǐng)進(jìn)一步閱讀1.JavaAPI關(guān)于List接口和其實(shí)現(xiàn)類(lèi)Set接口一、應(yīng)用場(chǎng)景二、Set接口1.Set接口2.Set接口的實(shí)現(xiàn)類(lèi)3.Set接口實(shí)現(xiàn)類(lèi)的適用場(chǎng)合三、HashSet的常用方法四、Set接口的一般用法本學(xué)習(xí)情境主要內(nèi)容41一、應(yīng)用場(chǎng)景在集合中當(dāng)需要元素唯一時(shí),使用Set集合。二、Set接口Set接口是繼承于Collection接口,用于存儲(chǔ)不含重復(fù)元素的集合。2.1Set接口不允許出現(xiàn)重復(fù)元素;集合中的元素位置無(wú)順序(存取和讀取的順序可能不一樣);Set集合沒(méi)有索引;有且僅有一個(gè)值為null的元素。Set接口有如下的特點(diǎn)2.2Set接口的實(shí)現(xiàn)類(lèi)Set接口的實(shí)現(xiàn)類(lèi)主要有HashSet、TreeSet、LinkedHashSet。1.HashSet底層是包裝了一個(gè)HashMap實(shí)現(xiàn)的采用HashCode算法來(lái)存取集合中的元素,具有比較好的讀取和查找性能通過(guò)equals()和HashCode()來(lái)判斷兩個(gè)元素是否相等非線程安全2.LinkedHashSet繼承HashSet,本質(zhì)是LinkedHashMap實(shí)現(xiàn)集合中的元素是有序的,根據(jù)HashCode的值來(lái)決定元素的存儲(chǔ)位置,同時(shí)使用一個(gè)鏈表來(lái)維護(hù)元素的插入順序非線程安全3.TreeSet是一種排序的Set集合,實(shí)現(xiàn)了SortedSet接口,底層是用TreeMap實(shí)現(xiàn)的,本質(zhì)上是一個(gè)紅黑樹(shù)相對(duì)HashSet來(lái)說(shuō),TreeSet提供了一些額外的按排序位置訪問(wèn)元素的方法,例如first(),last(),lower(),higher(),subSet(),headSet(),tailSet()排序分兩種:自然排序(存儲(chǔ)元素實(shí)現(xiàn)Comparable接口)和定制排序(創(chuàng)建TreeSet時(shí),傳遞一個(gè)自己實(shí)現(xiàn)的Comparator對(duì)象)2.3Set接口實(shí)現(xiàn)類(lèi)的適用場(chǎng)合HashSet應(yīng)用于數(shù)據(jù)的去重的場(chǎng)合LinkedHashSet應(yīng)用于數(shù)據(jù)需要去重的基礎(chǔ)上且有序的場(chǎng)合TreeSet應(yīng)用于數(shù)據(jù)需要去重,且數(shù)據(jù)按照特定大小進(jìn)行排序的場(chǎng)合三、HashSet常用方法方法摘要返回值類(lèi)型方法名說(shuō)明booleanadd(Ee)如果此set中尚未包含指定元素,則添加指定元素。voidclear()從此set中移除所有元素。booleancontains(Objecto)如果此set包含指定元素,則返回true。booleanisEmpty()如果此set不包含任何元素,則返回true。Iterator<E>iterator()返回對(duì)此set中元素進(jìn)行迭代的迭代器。booleanremove(Objecto)如果指定元素存在于此set中,則將其移除。intsize()返回此set中的元素的數(shù)量(set的容量)。四、Set接口的一般用法Set是一個(gè)接口,在使用Set集合時(shí),通常使用其實(shí)現(xiàn)類(lèi)通過(guò)new來(lái)實(shí)例化一個(gè)對(duì)象。1.創(chuàng)建HashSet類(lèi)的對(duì)象2.添加元素HashSet<String>stringSet=newHashSet<String>();stringSet.add("abc");HashSet使用了泛型,這里傳遞了一個(gè)類(lèi)型參數(shù)String,即表示一個(gè)存儲(chǔ)字符串類(lèi)型的集合3.刪除元素stringSet.clear();//從此set中移除所有元素。stringSet.remove(Objecto);//在此集合中移除指定的元素4.遍歷Set的兩種方法方法1,使用iterator迭代遍歷Set<String>stringSet=newHashSet<String>();Iterator<String>it=stringSet.iterator();//構(gòu)建迭代器while(it.hasNext()){Stringstr=it.next();

System.out.println(str);}方法2,使用增強(qiáng)for循環(huán)for(Strings:stringSet){

System.out.println(s);}小結(jié)Set接口是繼承于Collection的接口,用于存儲(chǔ)不含重復(fù)元素的集合。Set接口中的元素?zé)o序、不可重復(fù)。Set接口的實(shí)現(xiàn)類(lèi)主要有HashSet、TreeSet、LinkedHashSet。Set是接口,使用其實(shí)現(xiàn)類(lèi)通過(guò)new實(shí)例化一個(gè)集合對(duì)象。通過(guò)對(duì)象調(diào)用其實(shí)例方法實(shí)現(xiàn)CRUD操作??墒褂迷鰪?qiáng)for循環(huán)實(shí)現(xiàn)遍歷。Set接口的使用實(shí)例一、任務(wù)描述二、任務(wù)分析設(shè)計(jì)三、任務(wù)實(shí)施四、運(yùn)行結(jié)果

本學(xué)習(xí)情境主要內(nèi)容58一、任務(wù)描述使用Set存儲(chǔ)學(xué)生信息,并進(jìn)行CRUD操作。任務(wù)需求:定義實(shí)體類(lèi)學(xué)生類(lèi)。使用HashSet集合類(lèi),存取學(xué)生信息。做CRUD操作。使用多種方式遍歷該集合。二、任務(wù)分析設(shè)計(jì)一個(gè)班級(jí)里有若干個(gè)學(xué)生,首先定義一個(gè)實(shí)體類(lèi)學(xué)生類(lèi)封裝學(xué)生的基本信息,然后通過(guò)一個(gè)Set集合進(jìn)行存儲(chǔ),并實(shí)現(xiàn)對(duì)學(xué)生基本信息的CURD。其類(lèi)圖關(guān)系如圖2-1所示。三、任務(wù)實(shí)施1.創(chuàng)建學(xué)生類(lèi)StudentclassStudent{privateStringname;privateintage;publicStudent(Stringname,intage){ =name;

this.age=age;}

//省略setter和getter方法@OverridepublicStringtoString(){ return"Student["+name+","+age+"]";}}封裝學(xué)生的基本信息,setter和getter方法封裝構(gòu)造函數(shù)等2編寫(xiě)測(cè)試類(lèi)定義測(cè)試類(lèi)StudentSetTest,在main方法中編寫(xiě)代碼進(jìn)行測(cè)試第一步,創(chuàng)建Set的對(duì)象HashSet<Student>studentSet=newHashSet<Student>();Set是接口,實(shí)例化時(shí)使用其實(shí)現(xiàn)類(lèi),這里使用HashSetHashSet使用了泛型,這里要傳遞類(lèi)型Student類(lèi)第二步,向Set集合中添加元素Studentstu1=newStudent("張三",18);studentSet.add(stu1);首先創(chuàng)建學(xué)生類(lèi)的對(duì)象,再通過(guò)set集合的add方法,向Set集合中添加元素。同樣的,添加多個(gè)元素stu2,stu3第三步,移除集合中指定的元素studentSet.remove(stu2);調(diào)用set集合的remove()方法,移除指定的元素第四步,判斷Set集合中是否包含指定的元素boolean

isContain=false;isContain=studentSet.contains(stu1);System.out.println(isContain);調(diào)用set集合的contains方法,判斷Set集合中是否包含指定的元素,該方法返回布爾類(lèi)型的值第五步,迭代器的使用Iterator<Student>iterator=studentSet.iterator();Students=iterator.next();System.out.println("此Set集合中第一個(gè)元素是:"+s.toString());System.out.println("還有沒(méi)有下一個(gè)元素?"+iterator.hasNext());System.out.println("下一個(gè)是:"+iterator.next());首先調(diào)用set集合的iterator方法,生成該集合的迭代器,然后調(diào)用迭代器的hasNext()和next()方法hasNext()方法,如果迭代器具有更多元素,則返回true。next()方法,返回迭代器中的下一個(gè)元素。第六步,遍歷HashSet有多種遍歷方法方法1:使用迭代器Iterator進(jìn)行遍歷Iterator<Student>it=studentSet.iterator();while(it.hasNext()){ Studentstudent1=it.next();

System.out.println(student1.toString());}首先調(diào)用set集合的iterator方法,生成迭代器,然后通過(guò)循環(huán)調(diào)用迭代器的hasNext()和next()方法,循環(huán)遍歷set集合中的每一個(gè)元素

方法2,使用增強(qiáng)for循環(huán)for(Studentstudent2:studentSet){

System.out.println(student2.toString());}此方法需重點(diǎn)掌握。這種方法在遍歷數(shù)組和Map集合的時(shí)候同樣適用。使用for(元素類(lèi)型元素變量:集合)的形式遍歷集合中的每一個(gè)元素方法3:使用Lambda表達(dá)式遍歷Set集合studentSet.forEach((Studentstu)->System.out.println(stu));調(diào)用set集合的forEach(Consumer<?superT>action)方法。action,代表要對(duì)每個(gè)元素執(zhí)行的操作。forEach(Consumer<?superT>action)方法是Iterable<E>接口的方法,HashSet實(shí)現(xiàn)了Iterable<E>接口四、運(yùn)行結(jié)果這是最后的運(yùn)行結(jié)果小結(jié)本學(xué)習(xí)情境通過(guò)一個(gè)實(shí)例講述了:Set集合的基本使用,包括使用其實(shí)現(xiàn)類(lèi)創(chuàng)建set對(duì)象向Set集合中添加元素從Set集合中刪除元素迭代器的使用幾種遍歷方法等等更多的和更為詳細(xì)的方法調(diào)用請(qǐng)進(jìn)一步閱讀1.JavaAPI關(guān)于List接口和其實(shí)現(xiàn)類(lèi)Map接口一、應(yīng)用場(chǎng)景二、Map接口三、HashMap的常用方法四、Map接口的一般用法本學(xué)習(xí)情境主要內(nèi)容79一、應(yīng)用場(chǎng)景Map提供了一種映射關(guān)系,其中的元素是以鍵值對(duì)(key-value)的形式存儲(chǔ)的,能夠?qū)崿F(xiàn)根據(jù)key快速查找value。當(dāng)存儲(chǔ)的信息是需要鍵值對(duì)形式的時(shí)候,需要采用Map集合。二、Map接口Map不是collection的子接口或者實(shí)現(xiàn)類(lèi)。Map是一個(gè)接口。2.1Map接口Map提供了一種映射關(guān)系,它存儲(chǔ)的內(nèi)容是以鍵值對(duì)(key-value)映射的元組Entry。Entry將鍵值對(duì)的對(duì)應(yīng)關(guān)系封裝成了鍵值對(duì)對(duì)象,這樣我們?cè)诒闅vMap集合時(shí),就可以從每一個(gè)鍵值對(duì)對(duì)象中獲取相應(yīng)的鍵與值。Map中的類(lèi)型參數(shù):K-此映射所維護(hù)的鍵的類(lèi)型V-映射值的類(lèi)型Map集合是一個(gè)雙列集合,一個(gè)元素包含兩個(gè)值(一個(gè)key,一個(gè)value)Map集合中的元素,key和value的數(shù)據(jù)類(lèi)型可以相同,也可以不同Map集合中的元素,key不允許重復(fù),value可以重復(fù)Map集合中的元素,key和value是一一對(duì)應(yīng)的Map接口有如下的特點(diǎn)2.2Map接口的實(shí)現(xiàn)類(lèi)Map接口的實(shí)現(xiàn)類(lèi)常用的有HashMapLinkedHashMapHashtableTreeMap1.HashMap存儲(chǔ)結(jié)構(gòu)采用的哈希表結(jié)構(gòu),元素的存取順序不能保證一致。由于要保證鍵的唯一、不重復(fù),需要重寫(xiě)鍵的hashCode()方法、equals()方法。特點(diǎn):線程不安全,效率高哈希表依賴(lài)兩個(gè)方法:hashCode()和equals()2.LinkedHashMap存儲(chǔ)結(jié)構(gòu)采用的哈希表+雙向鏈表結(jié)構(gòu)。由鏈表保證元素有序。由哈希表保證元素唯一。需要重寫(xiě)鍵的hashCode()方法、equals()方法。LinkedHashMap最大的特點(diǎn)在于有序,但是它的有序主要體現(xiàn)在先進(jìn)先出(FIFO)上。3.HashtableHashtable是線程安全的一個(gè)Map實(shí)現(xiàn)類(lèi),它實(shí)現(xiàn)線程安全的方法是在各個(gè)方法上添加了synchronized關(guān)鍵字。但是現(xiàn)在已經(jīng)不再推薦使用HashTable了,因?yàn)楝F(xiàn)在有了ConcurrentHashMap這個(gè)專(zhuān)門(mén)用于多線程場(chǎng)景下的Map實(shí)現(xiàn)類(lèi),其大大優(yōu)化了多線程下的性能。底層數(shù)據(jù)結(jié)構(gòu)是哈希表。線程安全,效率低哈希表依賴(lài)兩個(gè)方法:hashCode()和equals()4.TreeMapTreeMap是一個(gè)很常用的Map實(shí)現(xiàn)類(lèi),一個(gè)很大的特點(diǎn)就是會(huì)對(duì)Key進(jìn)行排序,使用了TreeMap存儲(chǔ)鍵值對(duì),再使用iterator進(jìn)行輸出時(shí),會(huì)發(fā)現(xiàn)其默認(rèn)采用key由小到大的順序輸出鍵值對(duì),如果想要按照其他的方式來(lái)排序,需要重寫(xiě)也就是override它的compartor接口2.3Map接口實(shí)現(xiàn)類(lèi)的適用場(chǎng)合HashMap是基于“拉鏈法”實(shí)現(xiàn)的散列表。它是線程不安全的Map,方法上都沒(méi)有synchronized關(guān)鍵字修飾。一般用于單線程程序中。LinkedHashMap主要依靠雙向鏈表和hash表來(lái)實(shí)現(xiàn)的,通常提供的是遍歷順序符合插入順序,它的有序主要體現(xiàn)在先進(jìn)先出FIFO上。適用于一些特定應(yīng)用場(chǎng)景,例如“最近最不常用”。Hashtable也是基于“拉鏈法”實(shí)現(xiàn)的散列表。它一般用于多線程程序中。TreeMap是有序的散列表,它是通過(guò)紅黑樹(shù)實(shí)現(xiàn)的。很大的特點(diǎn)就是會(huì)對(duì)Key進(jìn)行排序。它一般用于單線程中存儲(chǔ)有序的映射。三、HashMap常用方法方法摘要返回值類(lèi)型方法名說(shuō)明Vput(Kkey,Vvalue)在此映射中關(guān)聯(lián)指定值與指定鍵。Vget(Object

key)

返回指定鍵所映射的值;如果對(duì)于該鍵來(lái)說(shuō),此映射不包含任何映射關(guān)系,則返回

null。Set<k>keySet()返回此映射中所包含的鍵的

Set

視圖。Collection<V>values()返回此映射所包含的值的

Collection

視圖。Vremove(Object

key)從此映射中移除指定鍵的映射關(guān)系(如果存在)。booleancontainsValue(Object

value)如果此映射將一個(gè)或多個(gè)鍵映射到指定值,則返回

true。booleancontainsKey(Object

key)如果此映射包含對(duì)于指定鍵的映射關(guān)系,則返回true。booleanisEmpty()如果此映射不包含鍵-值映射關(guān)系,則返回

true。intsize()返回此映射中的鍵-值映射關(guān)系數(shù)。四、Map接口的一般用法Map是一個(gè)接口,在使用Map集合時(shí),通常使用其實(shí)現(xiàn)類(lèi)通過(guò)new來(lái)實(shí)例化一個(gè)對(duì)象。1.創(chuàng)建一個(gè)Map的對(duì)象//使用Map接口的實(shí)現(xiàn)類(lèi)HashMap創(chuàng)建Map對(duì)象。//Key表示教師的工號(hào),V表示教師類(lèi)。Map<String,Teacher>teacherMap=newHashMap<String,Teacher>();2.向map中存值Teacherteac1=newTeacher("張三","男");Teacherteac2=newTeacher("李四","女");Teacherteac3=newTeacher("王五","男");teacherMap.put("001",teac1);teacherMap.put("102",teac2);teacherMap.put("201",teac3);3.從map中取值Teacherteacher=newTeacher();teacher=teacherMap.get(“001");4.查找Map中是否存在某個(gè)key值或value值teacherMap.containsKey("202");teacherMap.containsValue(teac3)5.返回Map集合中所有的KeySystem.out.println("所有的工號(hào):");for(Strings:teacherMap.keySet())

{System.out.println(s);}6.返回Map集合中所有的ValueSystem.out.println("所有的教師:");for(Teachert:teacherMap.values()){

System.out.println(t.toString());}7.entrySet()的使用Set<Map.Entry<String,Teacher>>entrySet=teacherMap.entrySet();for(Entry<String,Teacher>entry:entrySet){ Strings=entry.getKey(); Teachert=entry.getValue();

System.out.println(s+","+t.getName()+","+t.getSex());}entrySet()方法返回包含映射關(guān)系的Set集合8.遍歷Map的常用方法System.out.println("通過(guò)Key獲取Value進(jìn)行遍歷:");for(Strings:teacherMap.keySet()){ Teachert=teacherMap.get(s);

System.out.println(t.toString());}(1)方法1:首先獲取Map中所有的Key,再通過(guò)每一個(gè)Key獲取其對(duì)應(yīng)的Value值(2)方法2:獲取Map中所有的ValueSystem.out.println("通過(guò)獲取Map中所有的Value進(jìn)行遍歷:");for(Teachert:teacherMap.values()){

System.out.println(t.toString());}(3)方法3:首先通過(guò)HashMap.entrySet()得到鍵值對(duì)集合,再通過(guò)entrySet()進(jìn)行獲得鍵和值。System.out.println("通過(guò)entrySet()進(jìn)行遍歷:");for(Entry<String,Teacher>teac:teacherMap.entrySet()){

Strings=teac.getKey(); Teachert=teac.getValue();

System.out.println(s+","+t.toString());}小結(jié)Map不是collection的子接口或者實(shí)現(xiàn)類(lèi)。Map提供了一種映射關(guān)系,它存儲(chǔ)的內(nèi)容是以鍵值對(duì)(key-value)映射的元組,Map中的鍵值對(duì)以Entry類(lèi)型的對(duì)象實(shí)例形式存在。Map集合中的元素,key不允許重復(fù),value可以重復(fù)。Map集合中的元素,key和value是一一對(duì)應(yīng)的。Map是接口,在使用時(shí)是使用Map的實(shí)現(xiàn)類(lèi)通過(guò)new來(lái)創(chuàng)建Map的對(duì)象。Map接口的使用實(shí)例一、任務(wù)描述二、任務(wù)分析設(shè)計(jì)三、任務(wù)實(shí)施四、運(yùn)行結(jié)果

本學(xué)習(xí)情境主要內(nèi)容104一、任務(wù)描述使用Map存儲(chǔ)教師信息,并進(jìn)行CRUD操作。任務(wù)需求:定義教師類(lèi)。使用HashMap集合類(lèi),存取用戶(hù)信息。做CRUD操作。使用多種方式遍歷該集合。二、任務(wù)分析設(shè)計(jì)實(shí)現(xiàn)思路:首先定義實(shí)體類(lèi)封裝教師的基本信息,然后通過(guò)一個(gè)Map集合存儲(chǔ)多個(gè)教師,由于Map是一個(gè)接口,使用它的實(shí)現(xiàn)類(lèi)來(lái)創(chuàng)建集合對(duì)象;Map集合對(duì)象采用的是鍵值對(duì)的映射方式存儲(chǔ)的,因此這里使用“工號(hào)-教師”映射。最后實(shí)現(xiàn)對(duì)教師集合進(jìn)行CURD操作。其類(lèi)圖如圖2-3所示三、任務(wù)實(shí)施3.1定義教師類(lèi)publicclassTeacher{Stringname;Stringsex;publicTeacher(Stringname,Stringsex){ =name;

this.sex=sex;}//省略setter和getterf方法@OverridepublicStringtoString(){ return"Teacher["+name+","+sex+"]";}}定義Teacher類(lèi),封裝教師的基本信息,setter和getter方法,以及構(gòu)造函數(shù)等2編寫(xiě)測(cè)試類(lèi)定義測(cè)試類(lèi)TeacherMapTest,在main方法中編寫(xiě)代碼進(jìn)行測(cè)試第一步,創(chuàng)建Map對(duì)象Map<String,Teacher>teacherMap=newHashMap<String,Teacher>();Map是接口,實(shí)例化時(shí)使用其實(shí)現(xiàn)類(lèi),這里使用HashMapHashMap使用了泛型,采用“鍵-值”對(duì)的形式,需要傳遞K-V類(lèi)型參數(shù),這里采用“工號(hào)-教師”映射,

Key表示教師的工號(hào)字符串,V表示教師類(lèi)。第二步,向Map集合中添加元素Teacherteac1=newTeacher("張三","男");teacherMap.put("001",teac1);首先創(chuàng)建教師類(lèi)的對(duì)象,再通過(guò)Map集合的put方法,向Map集合中添加元素。同樣的,添加多個(gè)元素teac2,teac3等第三步,移除集合中指定的元素teacherMap.remove("001");調(diào)用Map集合的remove()方法,移除指定鍵的元素第四步,替換指定的元素Teacherteacher=newTeacher("李思","女");teacherMap.replace("102",teac2,teacher);調(diào)用Map集合的replace(Kkey,VoldValue,VnewValue)方法,指定的key,用新值替換舊值第五步,查找Map中是否存在某個(gè)key值或value值System.out.println("此Map中是否包含工號(hào)202?"+teacherMap.containsKey("202"));System.ou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論