版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章Java工具類6.1Java類集框架6.2泛型和枚舉6.3常用類本章重點集合類、數(shù)學(xué)類的使用6.1Java類集框架6.1.1JAVA中的類集框架6.1.2List接口及實現(xiàn)類6.1.3Set接口及實現(xiàn)類6.1.4Map接口及實現(xiàn)類1Java的類集框架JAVA的類集框架實現(xiàn)了對各種數(shù)據(jù)結(jié)構(gòu)的封裝,極大的降低了我們對數(shù)據(jù)管理與處理的難度。所謂框架就是一個類庫的集合。集合框架就是一個用來表示和操作集合的統(tǒng)一的架構(gòu),包含了實現(xiàn)集合的接口與類。類集(Collection或稱為容器)是一種包含其它對象,并提供對所包含對象的操作方法的對象,其包含的對象可以由同一類型的對象組成,也可以由不同類型的對象組成。6.1Java中的類集框架概念2類集框架中的接口6.1Java中的類集框架層次2集合框架中的接口Collection:集合層次中的根接口,JDK沒有提供這個接口直接的實現(xiàn)類。Set:不能包含重復(fù)的元素。對象可能不是按存放的次序存放,也就是說不能像數(shù)組一樣按索引的方式進行訪問,SortedSet是一個按照升序排列元素的Set。List:是一個有序的集合,可以包含重復(fù)的元素。提供了按索引訪問的方式。Map:包含了key-value對。Map不能包含重復(fù)的key。SortedMap是一個按照升序排列key的Map。6.1Java中的類集框架接口2集合框架中的實現(xiàn)類SortedSetSetListMapHashSet
LinkedHashSet
TreeSet
ArrayList
LinkedList
SortedMapHashMap
TreeMap
6.1Java中的類集框架接口與類2Collection接口Collection接口是構(gòu)造類集框架的基礎(chǔ)。它聲明所有類集都將擁有的核心方法,因為所有類集都實現(xiàn)Collection,所以熟悉它的方法對于清楚地理解框架是必要的。下面是該類接口中聲明的最常用的方法:booleanadd(Objectobj)
將obj添加對類集中voidclear()
從類集中刪除所有元素,即清空類集booleancontains(Objectobj)
如果obj是調(diào)用類集的一個元素,則返回true,否則,返回false,依賴于對象的equals()方法booleanisEmpty()
如果調(diào)用類集是空的,則返回true;否則返回falseIteratoriterator()
返回調(diào)用類集的迭代器booleanremove(Objectobj)
從調(diào)用類集中刪除obj的一個實例。如果這個元素被刪除了,則返回true;否則返回falseintsize()
返回調(diào)用類集中元素的個數(shù)6.1Java中的類集框架Collection接口2Collection接口中的其它方法booleanaddAll(Collectionc)將集合c中的所有元素都加入到當(dāng)前類集中booleancontainsAll(Collectionc)如果調(diào)用類集包含了c中的所有元素,則返回true;否則,返回falsebooleanremoveAll(Collectionc)從調(diào)用類集中刪除c的所有元素。如果類集被改變了(也就是說元素被刪除了),則返回true;否則返回falsebooleanretainAll(Collectionc)刪除調(diào)用類集中除了包含在c中的元素之外的全部元素。如果類集被改變了(也就是說元素被刪除了),則返回true,否則返回falseObject[]toArray()返回一個數(shù)組,該數(shù)組包含了所有存儲在調(diào)用類集中的元素。數(shù)組元素是類集元素的拷貝Object[]toArray(Objectarray[])返回一個數(shù)組,該數(shù)組僅僅包含了那些類型與數(shù)組元素類型匹配的類集元素。數(shù)組元素是類集元素的拷貝。如果array的大小與匹配元素的個數(shù)相等,它們被返回到array。如果array的大小比匹配元素的個數(shù)小,將分配并返回一個所需大小的新數(shù)組,如果array的大小比匹配元素的個數(shù)大,在數(shù)組中,在類集元素之后的單元被置為null。如果任一類集元素的類型都不是array的子類型,則引發(fā)一個ArrayStoreException異常6.1Java中的類集框架Collection接口2ArrayList和LinkedListArrayList:我們可以將其看作是能夠自動增長容量的數(shù)組。利用ArrayList的toArray()返回一個數(shù)組。Arrays.asList()返回一個列表。Liststooges=Arrays.asList("Larry","Moe","Curly");
LinkedList是采用雙向循環(huán)鏈表實現(xiàn)的。利用LinkedList實現(xiàn)棧(stack)、隊列(queue)、雙向隊列,包含:getFirstgetLastaddFirstaddLastremoveFirstremoveLastArrayList底層采用數(shù)組完成,而LinkedList則是以一般的雙向鏈表(double-linkedlist)完成,其內(nèi)每個對象除了數(shù)據(jù)本身外,還有兩個引用,分別指向前一個元素和后一個元素。如果我們經(jīng)常在List的開始處增加元素,或者在List中進行插入和刪除操作,應(yīng)該使用LinkedList,否則的話,使用ArrayList將更加快速。6.1Java中的類集框架List接口類2List類使用舉例使用List接口的實現(xiàn)類Collectioncol=newArrayList();col=newLinkedList();col=newVector();//以下代碼使用這三個類輸出效果一致
col.add(newInteger(50));col.add(newFloat(3.14f));col.add("hello");col.add(newInteger(50));//添加
col.add(newDate());Iteratoriter=col.iterator();//獲取每一元素,并輸出
while(iter.hasNext()){ Objectitem=iter.next();System.out.println(item);}
col.remove(newFloat(3.14f));
//刪除
System.out.println("集合長度:"+col.size());System.out.println(col.contains("hello"));//是否有"hello"col.clear();//清空案例6-16.1Java中的類集框架List類實例2List類使用舉例List接口使用舉例
Listlst=newArrayList();lst.add(newInteger(50));lst.add("hello");lst.add(newDate());lst.add(0,newInteger(30));//在指定位置添加
//輸出
for(inti=0;i<lst.size();i++)System.out.println(lst.get(i));System.out.println("hello是類集中的第"+lst.indexOf("hello")+"個元素");lst.remove(newInteger(30));lst.remove(1);//根據(jù)編號刪除6.1Java中的類集框架List類實例3HashSet和TreeSetTreeSet是依靠TreeMap來實現(xiàn)的。TreeSet是一個有序集合,TreeSet中元素將按照升序排列,缺省是按照自然順序進行排列,意味著TreeSet中元素要實現(xiàn)Comparable接口。我們可以在構(gòu)造TreeSet對象時,傳遞實現(xiàn)了Comparator接口的比較器對象。HashSet是基于Hash算法實現(xiàn)的,其性能通常都優(yōu)于TreeSet。我們通常都應(yīng)該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。案例6-36.1Java中的類集框架Set接口類3Set類使用舉例使用Set接口的實現(xiàn)類Collectioncol=newTreeSet();col=newHashSet();
col.add(newInteger(50));col.add(newInteger(50));col.add("hello");col.add(newFloat(3.14f));col.add(newDate());//添加
//添加過程會出異常,為什么?
Iteratoriter=col.iterator();//獲取每一元素,并輸出
while(iter.hasNext()){Objectitem=iter.next();System.out.println(item);}col.remove(newFloat(3.14f));//刪除
System.out.println("集合長度:"+col.size());System.out.println(col.contains("hello"));//是否有"hello"col.clear();//清空//考慮一下,與使用List接口的實現(xiàn)類相比,效果有什么不同6.1Java中的類集框架Set類實例3集合類使用舉例之VectorVector是JDK1.2之前的類,向量。但為了程序的通用性,最好不要使用其特有的方法,下面的代碼演示了其特有方法的使用
Vectorv=newVector();v.addElement("aaaa");//添加,等同于v.add("aaaa");Objectobj=v.elementAt(0);//獲取指定位置的元素,等同于v.get(0);v.removeElement("aaa");//刪除,等同于v.remove("aaa")v.removeElementAt(0);//等同于v.remove(0)v.removeAllElements();//清空,等同于v.clear()Enumerationenu=v.elements();while(enu.hasMoreElements())//輸出
System.out.println(enu.nextElement());6.1Java中的類集框架Vector4Map映射(map)是一個存儲關(guān)鍵字和值的關(guān)聯(lián)或者說是關(guān)鍵字/值對的對象。給定一個關(guān)鍵字,可以得到它的值。關(guān)鍵字和值都是對象。關(guān)鍵字必須是唯一的。但值是可以被復(fù)制的。Map接口映射唯一關(guān)鍵字到值。關(guān)鍵字(key)是以后用于檢索值的對象。給定一個關(guān)鍵字和一個值,可以存儲這個值到一個Map對象中。當(dāng)這個值被存儲以后,就可以使用它的關(guān)鍵字來檢索它。映射循環(huán)使用兩個基本操作:get()和put()。使用put()方法可以將一個指定了關(guān)鍵字和值的值加入映射。為了得到值,可以通過將關(guān)鍵字作為參數(shù)來調(diào)用get()方法。調(diào)用返回該值。6.1Java中的類集框架Map4Map接口的方法voidclear()從調(diào)用映射中刪除所有的關(guān)鍵字/值對booleancontainsKey(Objectk)檢查調(diào)用映射中是否包含關(guān)鍵字KbooleancontainsValue(Objectv)檢查調(diào)用映射中是否包含值VObjectget(Objectk)返回與關(guān)鍵字k相關(guān)聯(lián)的值booleanisEmpty()如果調(diào)用映射是空的,則返回true;否則返回falseObjectput(Objectk,Objectv)將一個鍵值對加入調(diào)用映射Objectremove(Objectk)刪除關(guān)鍵字等于k的鍵值對intsize()返回映射中關(guān)鍵字/值對的個數(shù)SetentrySet()返回包含了映射中的項的集合(Set)。該集合包含了類型Map.Entry的對象。這個方法為調(diào)用映射提供了一個集合“視圖”SetkeySet()返回一個包含調(diào)用映射中關(guān)鍵字的集合(Set)。這個方法為調(diào)用映射的關(guān)鍵字提供了一個集合“視圖”Collectionvalues()返回一個包含了映射中的值的類集。這個方法為映射中的值提供了一個類集“視圖”6.1Java中的類集框架Map接口4Map接口Map接口的可用實現(xiàn)類主要有HashMap,TreeMap,Hashtable,PropertiesHashtable,Properties是JDK1.0/1.1中的HashMap對key進行散列。TreeMap按照key進行排序。和Set類似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的時候,才使用TreeMap。案例6-46.1Java中的類集框架Map接口4Map接口對Map接口的操作,常常是轉(zhuǎn)換為對類集的操作,一個Map可通過自身的方法轉(zhuǎn)換為三個類集:Key,Value,Key+ValueSetkeys=map.keySet()Collectionsvalues=map.values();Setkvs=map.entrySet();內(nèi)容為Map.Entry的集合6.1Java中的類集框架Map接口4Map使用舉例Mapm=newHashMap();//TreeMap,Hashtable,Properties均可m.put("張三",);m.put("李四",);m.put("王五",);m.put("張三",);//覆蓋掉第一個值System.out.println("是否有李四的電話號碼:”
+m.containsKey("李四"));m.remove("王五");//刪除王五的記錄StringzsCode=(String)m.get("張三");6.1Java中的類集框架Map接口4Map使用舉例//輸出所有電話薄
//通過迭代Key
Setkeys=m.keySet();Iteratoriter=keys.iterator();while(iter.hasNext()){Objectkey=iter.next();Objectvalue=m.get(key);System.out.println(key+":"+value);}//通過迭代MapEntry,一個Map.Entry是一個Key+value的組合
Setentrys=m.entrySet();Iteratoritr=entrys.iterator();while(itr.hasNext()){Map.Entryentry=(Map.Entry)itr.next();Stringkey=(String)entry.getKey();Stringvalue=(String)entry.getValue();System.out.println(key+":"+value);6.1Java中的類集框架Map接口5Properties介紹屬性(Properties)是Hashtable的一個子類。它用來保持值的列表,在其中關(guān)鍵字和值都是字符串(String)Properties類的一個有用的功能是可以指定一個默認屬性,如果沒有值與特定的關(guān)鍵字相關(guān)聯(lián),則返回這個默認屬性。例如,默認值可以與關(guān)鍵字一起在getProperty()方法中被指定——如getProperty(“name”,“defaultvalue”)。如果“name”值沒有找到,則返回“defaultvalue”Properties中主要提供了以下獨特的方法:
ObjectsetProperty(String
key,String
value)添加值對,key與Value均為字符串
StringgetProperty(Stringkey)根據(jù)key檢索對應(yīng)的Valuevoidstore(OutputStream
out,String
header)將所有的鍵值對寫入指定輸出流
voidload(InputStream
inStream)
從指定輸入流中載入鍵值對
voidlist(PrintWriter
out)
用指定的流顯示鍵值對內(nèi)容
6.1Java中的類集框架PropertiesJDK1.2對以前類集的替代用ArrayList代替了Vector。用HashMap代替了Hashtable。用LinkedList代替了Stack。相對于ArrayList和HashMap,Vector和Hashtable中所有的方法都是線程同步的。類集總結(jié)類集框架為程序員提供了一個功能強大的設(shè)計方案以解決編程過程中面臨的大多數(shù)任務(wù)。下一次當(dāng)你需要存儲和檢索信息時,可考慮使用類集。記住,類集不僅僅是專為那些“大型作業(yè)”,例如聯(lián)合數(shù)據(jù)庫,郵件列表或產(chǎn)品清單系統(tǒng)等所專用的。它們對于一些小型作業(yè)也是很有效的。例如,TreeMap可以給出一個很好的類集以保留一組文件的字典結(jié)構(gòu)。TreeSet在存儲工程管理信息時是十分有用的。坦白地說,對于采用基于類集的解決方案而受益的問題種類只受限于你的想象力。6.2
泛型和枚舉6.2.1Java中的泛型6.2.2Java中的枚舉1泛型
泛型是JavaSE1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。Java語言引入泛型的好處是安全簡單。6.2Java中的泛型有兩個類如下,要構(gòu)造兩個類的對象,并打印出各自的成員xpublicclassStringFoo{
privateStringx;
publicStringFoo(Stringx){
this.x=x;
}
publicStringgetX(){
returnx;
}
publicvoidsetX(Stringx){
this.x=x;
}}publicclassDoubleFoo{
privateDoublex;
publicDoubleFoo(Doublex){
this.x=x;
}
publicDoublegetX(){
returnx;
}
publicvoidsetX(Doublex){
this.x=x;
}}
以上的代碼實在無聊6.2Java中的泛型引入定義對上面的兩個類進行重構(gòu),寫成一個類publicclassObjectFoo{
privateObjectx;
publicObjectFoo(Objectx){this.x=x;
}
publicObjectgetX(){returnx;
}
publicvoidsetX(Objectx){this.x=x;
}}
6.2Java中的泛型引入定義強制轉(zhuǎn)換publicclassObjectFooDemo{
publicstaticvoidmain(Stringargs[]){
ObjectFoostrFoo=newObjectFoo(newStringFoo("HelloGenerics!"));
ObjectFoodouFoo=newObjectFoo(newDoubleFoo(Double("33")));
ObjectFooobjFoo=newObjectFoo(newObject());
System.out.println("strFoo.getX="+(StringFoo)strFoo.getX());
System.out.println("douFoo.getX="+(DoubleFoo)douFoo.getX());
System.out.println("objFoo.getX="+objFoo.getX());
}}6.2Java中的泛型引入定義用Java5泛型來實現(xiàn)案例6-5publicclassGenericsFoo<T>{
privateTx;
publicGenericsFoo(Tx){this.x=x;
}
publicTgetX(){returnx;
}
publicvoidsetX(Tx){this.x=x;
}}6.2Java中的泛型如何定義實例化publicclassGenericsFooDemo{
publicstaticvoidmain(Stringargs[]){
GenericsFoo<String>strFoo=newGenericsFoo<String>("HelloGenerics!");
GenericsFoo<Double>douFoo=newGenericsFoo<Double>(newDouble("33"));
GenericsFoo<Object>objFoo=newGenericsFoo<Object>(newObject());
System.out.println("strFoo.getX="+strFoo.getX());
System.out.println("douFoo.getX="+douFoo.getX());
System.out.println("objFoo.getX="+objFoo.getX());
}}6.2Java中的泛型使用泛型2枚舉枚舉的本質(zhì)是類:定義枚舉:可以有方法,包括構(gòu)造方法。枚舉類可以實現(xiàn)接口。每個枚舉值可以實現(xiàn)接口帶有抽象方法的枚舉類6.2Java中的枚舉型要點枚舉定義publicenumENumColor{Red,Orange,Yellow,Green,Blue;
publicStringgetColorString(){switch(this.ordinal()){case0:return"ColorisRed"; case1:return"ColorisOrange";case2:return"ColorisYellow";case3:return"ColorisGreen";case4:return"ColorisBlue";default:return"invalidColor";}}};6.2Java中的枚舉型定義枚舉實例案例6-6publicclassENumExample{publicstaticvoidmain(String[]args){
for(ENumColorcolor:ENumColor.values()){System.out.println(color+"-----"+
color.getColorString());}System.out.println("\n\nXXXXConstvalue:"+
ENumColor.Yellow);}}6.2Java中的枚舉型應(yīng)用了解java.lang包掌握包裝類
掌握String、StringBuilder、StringBuffer
以下類:ClassObjectDateCalendarMath與Math.random()Random類6.3常用類Class類案例6-7使用對象中的getClass()方法使用靜態(tài)forName()方法使用自定義ClassLoader
對象加載新類創(chuàng)建的對象或或無需聲明自動創(chuàng)建對象通過6.3Class類特點getClass()和getSuperclass()classStoreString{protectedStoreString(){}privateStringname="diana";}classStoreIntegerextendsStoreString{protectedStoreInteger(){}privateintdeptno;}publicclassClassDemo{protectedClassDemo(){}publicstaticvoidmain(String[]args){StoreStringobjString=newStoreString();StoreIntegerobjInteger=newStoreInteger();ClassobjClass;
objClass=objString.getClass();System.out.println(“objString對象的類型是:“+objClass.getName());objClass=objInteger.getClass();System.out.println(“objInteger對象的類型是:"+objClass.getName());objClass=objClass.getSuperclass();System.out.println(“objInteger的父類是"+objClass.getName());}}6.3Class類使用Object類方法說明booleanequals(Objectobj)將當(dāng)前對象實例與給定的對象進行比較,檢查它們是否相等voidfinalize()throwsThrowable當(dāng)垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調(diào)用此方法。通常被子類重寫StringtoString()返回此對象的字符串表示voidwait()throwsInterruptedException使當(dāng)前線程進入等待狀態(tài)所有類的父類默認情況下,用戶定義的類擴展自O(shè)bject類6.3Object類使用Date類Date類表示日期和時間提供操縱日期和時間各組成部分的方法Date類的最佳應(yīng)用之一是獲取系統(tǒng)當(dāng)前時間構(gòu)造方法說明Date()使用當(dāng)天的日期創(chuàng)建DateDate(longdt)使用自1970年1月1日以后的指定毫秒數(shù)創(chuàng)建Date6.3Date類使用Date類的使用voiddisplay(){StringstrDate,strTime="";
DateobjDate=newDate();System.out.println(“今天的日期是:"+objDate);
longtime=objDate.getTime();System.out.println(“自1970年1月1日起"+“以毫秒為單位的時間(GMT):"+time);
strDate=objDate.toString();//提取GMT時間
strTime=strDate.substring(11,(strDate.length()-4));//按小時、分鐘和秒提取時間
strTime=“時間:"+strTime.substring(0,8);System.out.println(strTime);}6.3Date類使用日期格式importjava.util.*;importjava.text.*;classAAA{ publicstaticvoidmain(String[]args) { Randomrnd=newRandom(); intx=rnd.nextInt(); System.out.println("HelloWorld!"+x); doubled=Math.random(); System.out.println("HelloWorld!="+d);
SimpleDateFormatsd=newSimpleDateFormat("yyyy:MM:dd----hh-mm-ss"); System.out.println(sd.format(newDate())); }}6.3Date類使用Random類案例6-8此類生成隨機數(shù)兩種構(gòu)造方法Random類的方法:newRandom(long);沒有參數(shù)
nextInt()nextFloat()nextDouble()Doubled=Math.random();//在0—1之間Randomrnd=newRandom();intx=rnd.nextInt(1000);//在0—1000之間intx=rnd.nextInt();6.3
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電力工業(yè)概況》課件
- 小學(xué)一年級100以內(nèi)口算題
- 小學(xué)三年級多位數(shù)加減法脫式計算練習(xí)題
- 銀行績效考核總結(jié)
- 航空航天行業(yè)會計工作總結(jié)
- 《課程TMA系統(tǒng)篇》課件
- 公益機構(gòu)后勤管理工作概述
- 班主任與家校溝通的藝術(shù)與實踐
- 2023-2024學(xué)年河南省周口市部分校高三(下)開學(xué)地理試卷(2月份)
- 《創(chuàng)新的內(nèi)涵培訓(xùn)》課件
- 國際經(jīng)濟學(xué)中文版(克魯格曼教材)課件
- 管理方案日間照料中心
- 2024福建省能化集團下屬古雷熱電有限責(zé)任公司社會招聘筆試參考題庫附帶答案詳解
- 江蘇省蘇州市2023-2024學(xué)年高一上學(xué)期期末學(xué)業(yè)質(zhì)量陽光指標調(diào)研政治試卷
- 廣東省中山市2023-2024學(xué)年七年級上學(xué)期期末英語試題
- 煤礦安全生產(chǎn)管理人員逢查必考題庫(500題)
- 2024大型活動標準化執(zhí)行手冊
- 上頜骨骨折的護理
- 上海市嘉定區(qū)2023-2024學(xué)年八年級上學(xué)期期末語文試題
- 《機械制造基礎(chǔ)》課件-第一章 車削加工
- 公職人員職業(yè)道德規(guī)范
評論
0/150
提交評論