java基礎(chǔ)重點存儲的容器面向?qū)ο笳Z言事物體現(xiàn)都是形式所以為_第1頁
java基礎(chǔ)重點存儲的容器面向?qū)ο笳Z言事物體現(xiàn)都是形式所以為_第2頁
java基礎(chǔ)重點存儲的容器面向?qū)ο笳Z言事物體現(xiàn)都是形式所以為_第3頁
java基礎(chǔ)重點存儲的容器面向?qū)ο笳Z言事物體現(xiàn)都是形式所以為_第4頁
java基礎(chǔ)重點存儲的容器面向?qū)ο笳Z言事物體現(xiàn)都是形式所以為_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

對象的操作,對象,集合是對象最常用的式。集合的出現(xiàn)就是為了持有對象。集合中可以任意類型的對象,而且長度可變。在程序中有可能無法預(yù)先知道需要多少個對象那么用數(shù)組來裝對象的話長度不好定義而集數(shù)組中數(shù)據(jù)類型是單一的,集合中可以任意類型的對象。用于對象,長度是可變的,可以不同類型的對象類型單一的數(shù)據(jù)容器,操作復(fù)雜(數(shù)組一旦好不可變Java工程師對不同的容器進(jìn)行了定義,雖然容器不同,但是還是有一些共性可以抽取層里邊具有最共性,最基本的行為。具體的使用,就要選擇具體的容器了。為什么因為不斷向上抽取的東西有可能是不能創(chuàng)建對象的.抽象的可能性很大,并且子類對象的方法一些.所以是看頂層,Collection---|List:有順序,可重 數(shù)組實現(xiàn)查找快由于是數(shù)組實現(xiàn)組增容以及拷貝元素接按索引查找---|LinkedList:鏈表實現(xiàn)增刪快由于鏈表實現(xiàn)自己就可以刪除時讓前一個元素記住后一個元素后一個元素記住前一個元素效率較高但查詢時需要一個一個的遍歷率---|Vector:和ArrayList原理相同但線程安全效率略低和ArrayList實現(xiàn)方式相同問題---|Set: 順序,不可重---|---|Map數(shù)據(jù)結(jié)構(gòu)(datastructure)注意集合和數(shù)組中存放的都是對象的注意:集合和數(shù)組中存放的都是對象的而非對象本如果我們需要保留順序,并且保留重復(fù)元素,使用如果查詢較多,ArrayList如果存取較多LinkedList如果需要線程安全,Vector如果我們不需要保留順序,并且需要去掉重復(fù)元素,使如果我們需要將元素排序如果我們不需要排序HashSet,比如果我們需要保留順序,又要過濾重復(fù)元素,LinkedHashSetCollection中描述的是集合共有的功能(CRUD)List可存放重復(fù)元素,元素存取是有序的---| ----|List接 可以有重復(fù)元素的集----|Set接 不可以有重復(fù)元素的集學(xué)習(xí)Collection中的共性方法,多個容器在不斷向上抽取就出現(xiàn)了該體系。發(fā)現(xiàn)apiCollectionjava.util中(ET之類的類型,object因為涉及到了泛型.3:創(chuàng)建集合對象,CollectionListArrayList1:Collectioncoll=new1:add()addObject2:addAll(3:remove()5:clear(6:isEmpty(7:contains()判斷集 是否包含指定對)獲取獲取:9:int10toArray()publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()將指定對 計算機(jī)網(wǎng)絡(luò)現(xiàn)代操作系統(tǒng)java編程思想//增加2將list容器元素添加到list2容器中Collectionlist2=newArrayList(); //[java 技術(shù)計算機(jī)網(wǎng)絡(luò)現(xiàn)代操作系統(tǒng)java編程思想java語言}刪除1booleanremove=list2.remove("javaSystem.out.println(remove);//trueSystem.out.println(list2);////刪除2removeAll(將listbooleanremoveAll=list2.removeAll(list);publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()將指定對 clear(清空集合中的所有元素System.out.println(list);//[]}publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()將指定對 booleanempty=System.out.println(empty);//booleancontainslist.contains("java編程思想");System.out.println(contains);//trueCollectionlist2newArrayList();booleancontainsAll=list.containsAll(list2);System.out.println(containsAll);//false}publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()將指定對 獲取intsize=} 1:和 類對象,并且和相同就返回true{privateStringprivateint()}(Stringname,intage)=this.age=}publicinthashCode().hashCode()+}publicbooleanequals(Objectobj)類publicpublicstaticvoidmain(String[]args)p1= ",p2= ",p3= ",Collectionlist=newArrayList();//isEmpty()判斷集合是否為空booleanemptylist.isEmpty();intsize=list.size();//contains()判斷集 booleancontains=ifif(!(objinstanceofreturnfalse;}))p= ).equals()&&this.age==}publicStringtoString()return :name="+name+",age="+}}}}clear(remove() classBook{privateStringprivatedoublepublicBook()}publicBook(Stringname,doubleprice)=this.price=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicdoublegetPrice()return}publicvoidsetPrice(doubleprice)this.price=}publicinthashCode()return(int)(.hashCode()+}publicbooleanequals(Objectobj)if(!(objinstanceofBook))return}Bookbook=(Book).equals()&&this.price==}publicpublicStringtoString()return"book:@name:"++",price:"+}}publicclassDemo1publicstaticvoidmain(String[]args){Collectioncol=newArrayList();col.add(newBook("thinkinjava",100));col.add(newBook("corejava",200));}}---|---|Itor----|索11voidadd(intindexEelementbooleanaddAll(intindexCollectioncEremove(intindexEset(intindexEelement)Eget(intintindexOf(Objecto)lastIndexOf(Object注意:找不到返回-List<EsubList(intfromIndexinttoIndexpublicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()將指定對 //add,在0角標(biāo)位置添加一本書list.add(0,"和");在list2集合的1角標(biāo)位置添加list集合元素Listlist2=newArrayList(); 史booleanaddAll=list2.addAll(1,list);System.out.println(addAll);//true}publicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()將指定對象到容器 刪除0Objectremove=list.remove(0);}publicpublicstaticvoidmain(String[]args)ListListlist=new//增加:add()將指定對象到容器 修改2角標(biāo)位置的書,返回的原來2角標(biāo)位置的書Objectset=list.set(2,"邊城");System.out.println(set);//java編程思想}ListListlist=new//增加:add()將指定對 //查找:Eget(intindex)注意角標(biāo)越界Objectset=list.get(list.size()-1);System.out.println(set)java語言程序設(shè)計list.get(list.size()); }publicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()將指定對象到容器 ////查找:Eget(intindex)注意角標(biāo)越界Objectset=list.get(list.size()-1);System.out.println(set)java語言程序設(shè)計//list.get(list.size()); indexOf(Objecto返回第一次出現(xiàn)的指定元素的角標(biāo)intindexOf=list.indexOf("java編程思想");System.out.println(indexOf);//2沒有找到,返回-intindexOf2list.indexOf("三國志");System.out.println(indexOf2);//-1lastIndexOfintlastIndexOflist.lastIndexOf("java編程思想");System.out.println(lastIndexOf);//5}--|--|----|------|---------|ArrayList10長60%,((oldCapacity*3)/2+1)---------|數(shù)組實現(xiàn)查找快增刪慢通過newArrayList(20)顯式的指定用于對象的數(shù)組的長度。ArrayList是數(shù)組實現(xiàn)在增和刪的時候會牽扯到數(shù)組增容以及拷貝元素所以慢。數(shù)組是可以直接按索引查找,所以查找時較快可以考慮0角標(biāo)未知添加元素那么原來的角標(biāo)位置的元素需要整體往后移并且數(shù)組可能還要增容,一旦增容,就需要要將老數(shù)組的內(nèi)容拷貝到新數(shù)組中.所以數(shù)組的增刪的效率是很低的.

思路思路 3將對象元素進(jìn)行操作.注意:自定義對象要進(jìn)行復(fù)寫toString和equals方法.為什么?因為object是 的父類,object中的toString返回的是哈希值,object類中equals2 5publicpublicclassDemo6publicstaticvoidmain(String[]args){ArrayListarr=newArrayList();p1= ("jack",p2= ("rose",p3=new ("rose",18);ArrayListarr2=newArrayList();for(inti=0;i<arr.size();i++){Objectobj=arr.get(i);p= )if(!(arr2.contains(p))){}}}}{privateStringprivateint ()} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(!(obj ))return}p= ).equals()&&this.age==}publicpublicStringtoString()return@name:"++"age:"+}}--|--|----|------|---------|ArrayList10長60%,((oldCapacity*3)/2+1)---------|LinkedListLinkedList:鏈表實現(xiàn),增刪快,Linkedist:,需要讓上一個元素記住下一個元素.保存的有下一個元素的位置.雖然也有角標(biāo),但是查找的時候,需要從頭往下找,顯然是沒有數(shù)組查找快的.但是,鏈表在插入新元素的時候,只需要讓前一個元素記住新元素,讓新元素記住下一個元素就可以了.所以插入很快.由于鏈表實現(xiàn),增加時只要讓前一個元素記住自己就可以,刪除時讓前一個元素記住后一個元素,后一個元素記住前一個元素.這樣的增刪效率較高。addFirst(Ee)addLast(Ee)addFirst(Ee)addLast(Ee)1(1.6) tor()importimportimportpublicclassDemo3publicstaticvoidmain(String[argsLinkedListlist=newLinkedList(); ////list.addLast(null);Stringstr=(String)Stringstr2=(String)Stringstr3=(String)list.get(list.size()-Stringstr4=(String)//Objectelement=list.element();intsize=list.size();}}mportmportimportpublicclassDemo3publicstaticvoidmain(String[argsLinkedListlist=newLinkedList(); 史 torit= while(it.hasNext())Stringnext=(String)it.next();}}}importimportimportpublicclassDemo6publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList(); tordit= while(dit.hasNext()){}}}注意:可以使用該集合去模擬出隊列(先進(jìn)先出)或者堆棧(后進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)。////堆棧(后進(jìn)先出)publicclassDemo3publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList();Stringstr1=(String)list.pop();Stringstr2=(String)list.pop();Stringstr3=(String)list.pop();Stringstr4=(String)list.pop();System.out.println(list.size());//0System.out.println(list);//[]}}importimportpublicclassDemo3publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList();//出隊列;//;//;//}}ArrayList和LinkedList的查找的優(yōu)缺點1、ArrayList是采用動態(tài)數(shù)組來元素的,它允許直接用下標(biāo)號來直接查找對應(yīng)的元都沒法滿足需求。解決辦法:使用set集合。Vector:ArrayList。ArrayList:單線程效率高voidaddElement(EvoidaddElement(E EelementAtintindex)Enumeration EnumerationEnumerationbooleanE publicpublicstaticvoidmain(String[]{VectorVectorv=newVector();System.out.println(v);System.out.println(v.elementAt(2) //Enumerationens=while(ens.hasMoreElements(){System.out.println( ement()}}new如何獲取迭代器?Collection(itor(,所CollectionItor接口。而每一個容器都在其內(nèi)部對該接口進(jìn)行了內(nèi)部類的實現(xiàn)。也就是將取 Jdk1.5之后添加的新接口,Collection的父接口.實現(xiàn)了I ble的類就是可迭代的.并且支持增強(qiáng)for循環(huán)。該接口只有一個方法即獲取迭代器的方法i 可以獲取每個容器自身的迭代器I (Itor)5.0itor()方法放入到Ible接口中。CollectionIbleCollection體系都 tor tor(---| ---| ---|List接 可以有重復(fù)元素的集---|Set接 不可以有重復(fù)元素的集publicinterface Itreable1 tor<T tor()Itreator1:booleanItreator1:boolean2:E用3:void從迭代器指向的集合中移除迭代器返回的最后一個元素(作nextObject,那么返回的時候,objectpublicstaticvoidmain(String[]publicstaticvoidmain(String[]args){ArrayListlist=new//增加:add()將指定對 torit= while(it.hasNext())Stringnext=(String)}}importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 fortorit=tor();it.hasNext();)Stringnext=(String)}}}需要取出所有元素時,可以通過循環(huán),javafor循環(huán)。因為可以對內(nèi)存進(jìn)行一publicclasspublicclassDemo1publicstaticvoidmain(String[]args){Collectioncoll=newArrayList(); torit= while(it.hasNext()){}}}}如果迭代器的指針已經(jīng)指向了集合的末尾,那么如果再調(diào)用next(會返回importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 Itorit= while(it.hasNext())Stringnext=(String)it.next();}//Stringnext=(String)//}}importimport publicimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 Itorit= while(it.hasNext())////java.lang.IllegalStateExceptionStringnext=(String)it.next();}}}privateclassItrprivateclassItrimplementstor<E>intcursor=intlastRet=-intexpectedModCount=publicbooleanhasNext()returncursor!=}publicEnext()tryEnext=get(cursor);lastRet=cursor++;returnnext;}catch ceptione)thrownew}}publicvoidremove()if(lastRet==-thrownewtryif(lastRet<cursor)lastRet=-1;expectedModCount=modCount;}catch ceptione)thrownew}}} ConcurrentModificationException:當(dāng)一個集合在循環(huán)中即使用引用變量操作集合又使用迭代器操作集合對象,會拋出該異常。importimportjava.util.ArrayList;importjava.util.Collection;importjava.util.I publicclassDemo1{publicstaticvoidmain(String[]args){Collectioncoll=newArrayList(); torit= while(it.hasNext()){}}}如果是List集合,想要在迭代中操作元素可以使用List集合的特有迭代器 ---|I ------|tortor---|I ------|tortorListadd(E 入到next返回的下一個元素的前面(如果有voidset(Eo) nextprevious返回 返回true 對于I tor的子接口ListI tor在迭代list集合時,還可以對元素進(jìn)行添importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 獲取List torlit= while(lit.hasNext())Stringnext=(String)lit.next();}}}}importimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 獲取List torlit= while(lit.hasNext())Stringnext=(String)lit.next();}while(lit.hasPrevious())Stringnext=(String)lit.previous();}}}Setnextpreviousimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 torlit=lit.next()lit.next()System.out.println(lit.next())java//nextprevious}}publicclassDemo2publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()將指定對 torlit=lit.next()lit.next()System.out.println(lit.next())javanext");//}}Set:注重獨(dú)一無二的性質(zhì),該體系集合可以知道某物是否已近存在于集合中,不會重復(fù)的用于無序(存入和取出的順序不一定相同)元素,值不能重復(fù)到堆上同一個對象的兩個是相等的。如果對兩個調(diào)用hashCode方法,會得到相同的結(jié)果,如果對象所屬的類沒有覆蓋Object的hashCode方法的話,,hashCode值是不可能相等的。如果想要讓兩個不同的對象視為相等的,就必須覆蓋Object繼下來的hashCodeequalsObjecthashCode方法返回的是該對象的內(nèi)存同時也需要兩個不同對象比較equals方返回true---| ---| for---| ---|List接 可以有重復(fù)元素的集---|---|---|Set接 不可以有重復(fù)元素的集importimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicclassDemo4publicstaticvoidmain(String[]args)//Set集合存和取的順序不一致。Seths=newHashSet(); 知識艦船知識世界軍事 torit=知識漢和防務(wù)while(it.hasNext()){}}}---|---| for---| ---|List接 可以有重復(fù)元素的集---|---|---|Set接 不可以有重復(fù)元素的集---|HashSet線程不安全,存取速度快。底層是以哈希表邊存放的是哈希值。HashSet元素的順序并不是按照存入時的順序(和顯然不同)由于Set集合是不能存入重復(fù)元素的集合。那么HashSet也是具備這一特性的。入的位置。同時也會與其他已經(jīng)加入的對象的hashCode進(jìn)行比較,如果沒有相等的hashCode,HashSet就會假設(shè)對象沒有重復(fù)出現(xiàn)。hashCode了,equalsfalseHashSet認(rèn)為新加入的對象沒有重復(fù).的哈希值,如果哈希值一樣,接著會比較equals方法如果equls結(jié)果為true,HashSetequalsfalse就不是同一個元素。hashcode(equals(true時,hashset集合認(rèn)為這兩個元素是equals如果不相同,equals方法的。注意:HashSet集合在判斷元素是否相同先判斷hashCodebooleancontains(Objectimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicclassDemo4publicstaticvoidmain(String[]args)SetSeths=new知識setSystem.out.println(hs.size());//setbooleanaddhs.add("世界軍事falsesetSystem.out.println(hs.size());//4 torit=hs.i while(it.hasNext()){}}}packagepackageimportimport publicclassDemo4publicstaticvoidmain(String[]args){HashSeths=newHashSet(); ("jack",20)); ("rose", ("hmm", ("lilei", ("jack",Itorit=while(it.hasNext()){Objectnext=it.next();}}}自定義對象,并嘗試添加重復(fù)對象(對象的重復(fù)的判定 privateStringprivateintage;(){} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode(){System.out.println("hashCode:"+);return.hashCode()+age*37;}publicbooleanequals(Objectobj){System.out.println(this+"---equals---"+obj);if(objinstanceof ){p= ).equals()&&this.age==}elsereturn}}}publicStringtoString()return@name:"++"age:"+}}問題現(xiàn)在有一批數(shù)據(jù)要求不能重復(fù)元素而且要排序ArrayList、LinkedList不能去除重復(fù)數(shù)據(jù)。HashSet可以去除重復(fù),但是是無序。importpublicclassDemo5importpublicclassDemo5publicstaticvoidmain(String[]args){TreeSetts=newTreeSet();System.out.println(ts);//[aaa,bbb,ccc,}}---|---| for---| ---|List接 有序,可以重復(fù),有角標(biāo)的集---|---|---|Set接 無序,不可以重復(fù)的集---|HashSet---|---|TreeSet紅-樹算法的規(guī)則TreeMap集合的構(gòu)造方法。注意:當(dāng)Comparable比較方式和Comparator比較方式同時存在時,以要比較次要條件(假設(shè)和一直的人為相同的人,如果想要對人按照的大小來相同不同的人是不同的人。此時就需要進(jìn)行次要條件判斷(需要判斷只有和同時相等的才可以返回0.)return0了一個接口,叫做Comparable接口.字符串重寫了該接口的compareTo方法,所以String對象具備了比較性.那么同樣道理,我的自定義元素(例如類,Book類)想TreeSet集合,就需要實現(xiàn)該接口,也就是要讓自定義對象具備比較性.compareTocompare方法中的來保證元素的唯一性。ComparablecompareTo()0時,說明兩----|----|compareTo(Object----|compareObjecto1Objecto2)importpublicclassDemo4importpublicclassDemo4publicstaticvoidmain(String[argsTreeSetts=newTreeSet(); ("aa",20,"男")); ("bb"18女 ("cc"17男 ("dd"17女 ("dd"15女 ("dd"15女System.out.println(ts.size());//}}implementsComparableprivateStringprivateintprivateString。 ()} (Stringname,intage,Stringgender)=name;this.age=age;this.gender=gender;}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicStringgetGender()return}publicvoidsetGender(Stringgender)this.gender=}publicinthashCode()returnname.hashCode()+age*}publicbooleanequals(Objectobj){System.err.println(this+"equals:"+obj);if(!(objinstanceof )){return}}p=).equals()&&this.age==}publicStringtoString()return [name="+name+",age="+age+",++}publicintcompareTo(Objectobj)p=)System.out.println(this+"if(this.age>p.age)return}if(this.age<p.age)return-} }}importpublicclassDemo5publicstaticvoidmain(String[]args)TreeSetts=newTreeSet(new ts.add(newBook("thinkinjava",100));ts.add(new 技術(shù)ts.add(newBook("現(xiàn)代操作系統(tǒng)ts.add(newBook("java就業(yè) ",35));ts.add(newBook("thinkinjava",100));ts.add(newBook("cccinjava",100));}} paratorimplementsComparatorpublicintcompare(Objecto1,Objecto2){Bookb1=(Book)o1;Bookb2=(Book)o2;System.out.println(b1+"comparator"+b2);if(b1.getPrice()>b2.getPrice()){return}if(b1.getPrice()<b2.getPrice())return-}return}}classBookprivateStringprivatedoublepublicBook()}publicStringgetName()return}publicvoidsetName(Stringname)=}publicdoublegetPrice()return}}publicvoidsetPrice(doubleprice)this.price=}publicBook(Stringname,doubleprice)=this.price=}publicStringtoString()return"Book[name="+name+",price="+price+}}例如Stringstr="8101552 TreeSetTreeSet自身具備排序功能。publicpublicclassDemo5publicstaticvoidmain(String[]args){Stringstr="81015527";String[]strs=str.split("");TreeSetts=newTreeSet();for(intx=0;x<strs.length;x++){inty=Integer.parseInt(strs[x]);}}}(Key(valuemap集合中的一個元素??错攲庸残苑椒ㄕ易宇愄赜袑ο驝ollection是單列集合Map是雙列集合。Map一次存一對元素Collection一次存一個。MapMap一次存入一對元素,是以鍵值對的形式存在.鍵與值存在映射關(guān)系.一定要保證鍵的唯interfaceK-此映射所的鍵的類V映射值的類型KeyValue11的關(guān)系,如:門牌號:家老公:老婆---|Map---|HashMap---|TreeMapHashMap替代。hashCodeequals方法。底層是二叉樹數(shù)據(jù)結(jié)構(gòu)??梢詫ap集合中的鍵進(jìn)行排序。需要使用1、Vput(Kkey,V2、putAll(Map<extendsK,extendsVm)關(guān)系到此映射中(可選操作 清空集合對1:valueget(key)返1、boolean 2、booleancontainsKey(Objectkey)3、booleancontainsValue(Object 判斷集合中是否包含指定Int該案例使用了HashMap,建立了學(xué)生和之間的映射關(guān)系。并試圖添加重復(fù)的鍵importimportimportpublicclassDemo1publicstaticvoidmain(String[]args)Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);//System.out.println(map1.put("jack",30));Map<StringIntegermap2newHashMap<StringInteger>(); 豐",100); ",20);System.out.println("map2:"+map2);//從指定映射中將所有映射關(guān)系 System.out.println("map1:"+map1);}}remove(刪除關(guān)聯(lián)對象,指定keyclear(Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);//System.out.println("value:"+map1.remove("java"));System.out.println("map1:"+Vget(Objectkey通過指定的key對象獲取valueintsize(Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);Vget(Objectkey通過指定的key對象獲取valueintsize(System.out.println("value:"+System.out.println("map.size:"+booleanisEmpty(長度為0返回true否則booleancontainsKey(Objectkey判斷集合中是否包含指定的//booleancontainsValue(ObjectMap<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);System.out.println("isEmpty:"+map1.isEmpty());System.out.println("containskey:"+ 1、map1、map集合中所有的鍵setSet<K 2、values,Collection<Vvalues()不能獲key對3、Map.Entry對 推薦使 重Set<Map.Entry<k,v>>將將map集合中的鍵值映射關(guān)系打包成一個對象getValue獲取其鍵和值。(keySet()importjava.util.HashMap;importjava.util.I importjava.util.Map;importjava.util.Set;publicclassDemo2importjava.util.HashMap;importjava.util.I importjava.util.Map;importjava.util.Set;publicclassDemo2publicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,"cccc");// 式:使用//Set<KkeySet(返回所有的key對象的SetSet<Integer>ks= tor<Integer>it= while(it.hasNext()){Integerkey=it.next();Stringvalue=map.get(key);System.out.println("key="+key+"value="+value);}}}publicstaticvoidmain(String[]args)publicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,//Collection<V>Collection<String>vs=map.values(); tor<String>it=vs.i while(it.hasNext()){Stringvalue=it.next();System.out.println("value="+value);}}第三種方式publicstaticinterfaceSet<Map.Entry<K,V>>Map.EntrygetKeygetValuepublicpublicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,"cccc");Map.Entry//Set<Map.Entry<K,V>>返回的Map.Entry對象的SetMap.Entry包含了key和valueSet<Map.Entry<Integer,String>>es=Itor<Map.Entry<Integer,String>>it=while(it.hasNext())//Map.Entry<Integer,String>en=//Integerkey=Stringvalue=System.System.out.println("key="+key+"value="+}}hashCodeequals方法。packageimportpackageimportjava.util.HashMap;importjava.util.I importjava.util.Map.Entry;importjava.util.Set;publicclassDemo3publicstaticvoidmain(String[]args),String>hm=newHashMap<("jack",20),"1001");("rose",18),("lucy",19),("hmm",17),("ll",25),, ("rose",18),,String>>entrySet= ,String>>it= while(it.hasNext()) ,String>next=it.next();key=next.getKey();Stringvalue=next.getValue();System.out.println(key+"="+value);}}} privateStringprivateint()} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(obj )p= ).equals()&&this.age==}elsereturn}}publicpublicStringtoString()return@name:"++"age:"+}}}和TreeSet一樣原理,需要讓在鍵位置的對象實現(xiàn)Comparable接口,重寫TreeMap集合的構(gòu)造方法。注意:當(dāng)Comparable比較方式和Comparator比較方式同時存在時,以要比較次要條件(假設(shè)和一直的人為相同的人,如果想要對人按照的大小來相同不同的人是不同的人。此時就需要進(jìn)行次要條件判斷(需要判斷只有和同時相等的才可以返回0.)importpublicclassimportpublicclassDemo4publicstaticvoidmain(String[]args){TreeMap<String,Integer>tree=newTreeMap<String, ", ", ", ", ", ",24);}}packagepackage importjava.util.I importjava.util.Map.Entry;importjava.util.Set;importpublicclassDemo3publicstaticvoidmain(String[]args),String>hm=newTreeMap<("jack",20),("rose",18),("lucy",19),("hmm",17),("ll",25),, ("rose",18),,String>>entrySet= ,String>>it= while(it.hasNext()) ,String>next=it.next();key=next.getKey();Stringvalue=next.getValue();System.out.println(key+"="+}}} paratorimplements >publicintp2)if(p1.getAge()>p2.getAge())return-}elseif(p1.getAge()<p2.getAge())return}return}} implements >privateStringprivateintage;(){} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(obj )pp=).equals()&&this.age==}elsereturn}}publicStringtoString()return@name:"++"age:"+}publicint p)if(this.age>p.age)return}elseif(this.age<p.age)return-} }}Map的重復(fù)健將覆蓋舊鍵,將舊值返回。1list進(jìn)行二分查找:int//listComparableint ComparatorreverseOrder();ComparatorreverseOrder(Comparator); SetsynchronizedSet(Set<T>s)MapsynchronizedMap(Map<K,V>m)ListsynchronizedList(List<T>可以使用Collection中的toArray方法。注意:是Collection不是Collections工具類傳入指定的類型數(shù)組即可,該數(shù)組的長度最好為集合的size。2 ListList 數(shù)據(jù)類型,那么asList會將數(shù)組中的元素作為集合中importimportjava.util.ArrayList;importjava.util.Collections;importjava.util.Arrays;importjava.util.List;class{publicstaticvoidmain(String[]{ArrayList<Integer>list=newArrayList<Integer>();System.out.println(Collections.binarySearch(list,8)找不到返回-插入點-//反序集合輸出Collections.reverselistSystem.out.println(list);System.out.println(Collections.max(list));//fill()//Collections.fill(list,5);System.out.println(list);Integeris[]=newInteger[]{6,7,8};List<Integer>list2=Arrays.asList(is);list.addAll(list2);System.out.println(list);將ListObject[]ins=list.toArray();System.Object[]ins=list.toArray();System.out.println(Arrays.toString(ins));}}問題:定義一個 描述一 Arrays.asList(SetaddAll(listimportjava.util.Arrays;importjava.util.Set;importjava.util.List;importimportjava.util.Arrays;importjava.util.Set;importjava.util.List;import1類{publicStringpublicint}()(Stringname,intage)=name;this.age=age;}publicStringtoString()returngetClass().getName()+":name="++"+}4hashCodepublicinthashCode()return}publicpublicbooleanequals(Objecto)p=if(oinstanceof p=( )o;.equals()&&(this.age==}}classDemo2publicstaticvoidmain(String[]args)[]ps=new[]{new("lucy",20),new("jack",34)("jack",("lili", >list= >set=newHashSet< }}importimport publicimportimport publicclassDemo5publicstaticvoidmain(String[argsArrayListarr=newArrayList();arr.add(newTiger("華南虎"));arr.add(newTiger("東北虎arr.add(newSheep(" torit= while(it.hasNext()){Objectnext=it.next();Tigert=(Tiger)next;}}}classTiger{Stringname;publicTiger()}publicTiger(Stringname)=}publicStringtoString()return"Tiger@name:"+}publicvoideat(){System.out.println(吃羊");}}classSheep{Stringname;publicSheep()}publicSheep(Stringname)=}publicStringtoString()return"Sheep@name:"+}publicvoidpublicvoideat(){System.out.println(吃青草");}}[Tiger@name:[Tiger@name:華南虎Tiger@name:東北虎]Exceptioninthread"main" .gz.map.Sheepcannotbecasttocn. atcn. 原因:任意對象,但是如果需要使用對象的特有方法,轉(zhuǎn)換,如果集合中存入的對象不同,可 類型轉(zhuǎn)換異常出現(xiàn)問題存入的是特定的對象,Object對象,需要強(qiáng)制類型轉(zhuǎn)換,可能誘發(fā)類型轉(zhuǎn)換異常.雖然可以再類型轉(zhuǎn)換的時候通過if語句進(jìn)行類型檢查(instanceof),但是效率較低.(例如吃飯的能一種類型的對象.就像給容器貼說明該容器中只能什么樣類型的對象。jdk5.0后出現(xiàn)了泛型泛型應(yīng)用1.集合類<類類型>變量名newpublicpublicclassDemo5publicstaticvoidmain(String[]args)//使用泛型后,規(guī)定該集合只能放羊, ArrayList<Sheep>arr=newArrayList<Sheep>();arr.add(newSheep("美羊羊"));arr.add(newSheep("懶洋洋arr.add(new arr.add(newTiger("東北虎")); tor<Sheep>it= while(it.hasNext())使用泛型后,不需要強(qiáng)制類型轉(zhuǎn)換了Sheepnext=it.next();}}}}格式通過<>來指定容器中元素的類型JDK5.0ComparablepackagepackagepublicinterfaceComparablepublicintcompareTo(Object}JDK5.0packagepackagepublicinterfaceComparable<T>publicintcompareTo(T}publicclassDemo6publicpublicclassDemo6publicstaticvoidmain(String[]args) ArrayList<String>arr=newArrayList<String>(); }}細(xì)節(jié)二publicclassDemo6publicclassDemo6publicstaticvoidmain(String[]args)//泛型類型必須 //ArrayList<int>arr2=newArrayList<Integer>arr2=new}}}publicclassDemo6publicclassDemo6publicstaticvoidmain(String[]args)ArrayList<String>arr=newArrayList<String>(); Stringstr=arr.get(0);}}publicpublicclassDemo6publicstaticvoidmain(String[]args)int[]arr={1,2,3,4,5}privatestaticvoidreverse(Object[]obj)}} public返回值類型函數(shù)名}publicpublicstaticvoidmain(String[]args)int[]arr={1,2,3,4,5new}public<T>TgetData(Tdata)return}publicclassDemo6publicpublicclassDemo6publicstaticvoidmain(String[]args)//,int[]arr={1,2,3,4,5new}private<T>voidreverse(T[]arr)intstart=intend=arr.length-for(inti=0;i<arr.length;i++)if(start<end)Ttemp=arr[start];arr[start]=arr[end];arr[end]=temp;}}}}}importpublicclassDemo6publicstaticvoidmain(String[]args)importpublicclassDemo6publicstaticvoidmain(String[]args){Integer[]arr={1,2,3,4,5};newDemo6().reverse(arr);}private<T>voidreverse(T[]arr)intstart=intend=arr.length-for(inti=0;i<arr.length;i++)if(start<end)Ttemp=arr[start];arr[start]=arr[end];arr[end]=temp;}}}}使用泛型方法前需要進(jìn)行泛型,使用一對尖括號<泛型>,的位置在static后返回當(dāng)一個類中有多個函數(shù)了泛型,那么該泛型的可以在類上。22class類名<泛型}importimpo

溫馨提示

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

評論

0/150

提交評論