Java工具類(lèi)及常用算法_第1頁(yè)
Java工具類(lèi)及常用算法_第2頁(yè)
Java工具類(lèi)及常用算法_第3頁(yè)
Java工具類(lèi)及常用算法_第4頁(yè)
Java工具類(lèi)及常用算法_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Object類(lèi)Object類(lèi)是Java程序或類(lèi)庫(kù)中所有類(lèi)的直接或間接父類(lèi),所有對(duì)象(包括數(shù)組)都實(shí)現(xiàn)這個(gè)類(lèi)的方法Object類(lèi)擴(kuò)大了方法的適用范圍,例

Voidfun(Objecto)可以將任意類(lèi)型的對(duì)象傳遞給它Object類(lèi)中的主要方法介紹1Object類(lèi)Wait():當(dāng)一個(gè)線程執(zhí)行了一個(gè)對(duì)象的wait()方法時(shí),該線程就會(huì)處于該對(duì)象的等待池中Notify():當(dāng)一個(gè)線程執(zhí)行了一個(gè)對(duì)象的notify方法時(shí),就會(huì)喚醒該對(duì)象等待池中一個(gè)線程notifyAll():當(dāng)一個(gè)線程執(zhí)行了一個(gè)對(duì)象的notify方法時(shí),就會(huì)喚醒該對(duì)象等待池中所有線程2Object類(lèi)protectednativeObjectclone()throwsCloneNotSupportedException;生成當(dāng)前對(duì)象的一個(gè)備份應(yīng)用clone()方法 參見(jiàn)mypack2.TestClone1.java應(yīng)用該方法的對(duì)象必須實(shí)現(xiàn)Cloneable接口,否則異常。必須重寫(xiě)clone()方法。在該方法中必須使用super.clone();注意shallowclone與deepclone:mypack2.TestClone2.java3Equals()方法提供對(duì)象是否“==”的判斷Object類(lèi)的equals方法實(shí)現(xiàn)

publicbooleanequals(Objecto){ returnthis==o; }但包裝類(lèi),String類(lèi)等覆蓋了該方法,只要類(lèi)型一致,狀態(tài)和行為相等就視為相等hashCode()返回對(duì)象的散列值Object類(lèi)的hashCode方法實(shí)現(xiàn)是將對(duì)象內(nèi)存地址轉(zhuǎn)換成一個(gè)整數(shù),所以,不同對(duì)象的散列值不同。Object類(lèi)4對(duì)象的toString方法返回對(duì)象的文本表示。Object類(lèi)的實(shí)現(xiàn):

publicStringtoString(){

returngetClass().getName()+'@'+Integer.toHexString(hashCode());

}但包裝類(lèi),String,StringBuffer類(lèi)都覆蓋了toString方法,返回具有更加實(shí)際意義的內(nèi)容Object類(lèi)5publicfinalclassClass<T>extendsObjectT:由此Class對(duì)象建模的類(lèi)的類(lèi)型。例如,String.class

的類(lèi)型是Class<String>Class類(lèi)對(duì)象表示正在運(yùn)行的Java應(yīng)用程序中的類(lèi)和接口Class類(lèi)對(duì)象是在Jvm裝載類(lèi)時(shí)創(chuàng)建通過(guò)Class對(duì)象可以獲得對(duì)象的域、方法等信息。這種獲得運(yùn)行時(shí)對(duì)象信息的方法又稱為反射(Reflection)參見(jiàn)mypack1.RunTimeClassInfo.javaClass類(lèi)6包裝類(lèi)是基本類(lèi)型的面向?qū)ο蟮拇恚╥nt,Integer)每個(gè)基本數(shù)據(jù)類(lèi)型都對(duì)應(yīng)一個(gè)包裝類(lèi)包裝類(lèi)提供了對(duì)象相等判斷和大小判斷包裝類(lèi)對(duì)象封裝的數(shù)據(jù)不可更改(immutable),若要更改則需重新生成新的對(duì)象參見(jiàn)例7-4:DoubleAndString.javaWrapperclasses包裝類(lèi)7包裝類(lèi)列表8數(shù)學(xué)類(lèi)提供常見(jiàn)的指數(shù)運(yùn)算,對(duì)數(shù)運(yùn)算,三角函數(shù)運(yùn)算等數(shù)學(xué)運(yùn)算Math類(lèi)是final的Math類(lèi)的構(gòu)造方法是private的Math類(lèi)提供的方法都是靜態(tài)的常用的方法有:

absrandommaxminroundfloorceillogexpsqrt

pow

三角函數(shù)等參見(jiàn)例7-5:TestMath.javaMath類(lèi)

9System類(lèi)publicfinalclassSystemextendsObjectPublicstaticfinal

InputStream

in:

“標(biāo)準(zhǔn)”輸入流Publicstatic

finalPrintStream

out:

“標(biāo)準(zhǔn)”輸出流Publicstatic

finalPrintStream

err:

“標(biāo)準(zhǔn)”錯(cuò)誤輸出流Charc=System.in.read();System.out.println(“hello”);10System類(lèi)PublicstaticlongcurrentTimeMillis()Publicstaticvoidexit(intstatus)Publicstaticvoidgc()PublicstaticPropertiesgetProperties()詳細(xì)情況請(qǐng)參見(jiàn)Jdk

api.11Java中,字符串都是用類(lèi)的對(duì)象來(lái)實(shí)現(xiàn)的兩類(lèi)字符串String:創(chuàng)建后不會(huì)再做修改或變動(dòng)的字符串常量StringBuffer:創(chuàng)建后允許再做更改和變化的字符串字符串類(lèi)12String類(lèi)String中的equals()方法覆蓋了Object的equals()方法,只要內(nèi)容相同就返回true.由于字符串對(duì)象的大量使用,Java中為了節(jié)省內(nèi)存空間和運(yùn)行時(shí)間,在編譯階段就把所有的字符串文字放到一個(gè)文字池中,其中所有相同的字符串常量被合并,只占用一個(gè)空間。13String類(lèi)Strings1="abc";

Strings2="abc";

if(s1==s2)

System.out.println("s1,s2refertothesameobject");

else

System.out.println(“s1,s2refertothedifferentobject");問(wèn)題:共創(chuàng)建了幾個(gè)StringObject?14String類(lèi)Strings3=newString(“def”);Strings4=newString(“def”);問(wèn)題:共創(chuàng)建了幾個(gè)StringObject?S3==s4?15String類(lèi)常見(jiàn)的字符串賦值方法例7-6:StringAssign.java常見(jiàn)的字符串方法應(yīng)用例7-7:TestStringMethod.java16String類(lèi)在字符串中檢索特定字符或子字符串,如果找到,則返回匹配成功的位置,否則返回-1indexOf():從字符串的首位開(kāi)始查找lastIndexOf():從字符串的末尾開(kāi)始查找Stringstr=“HelloHelloHello”;System.out.println(str.indexOf(‘e’));//1System.out.println(str.indexOf(‘e’,2));//6System.out.println(str.lastIndexOf(‘e’));//11System.out.println(str.indexOf(“ello”,2));//6System.out.println(str.lastIndexOf(“Hello”),11);//5System.out.println(str.indexOf(“Ello”));//-117String類(lèi)Concat(String

str):把字符串str附加在當(dāng)前字符串的末尾Strings1=“Hello”;Strings2=s1.concat(“World”);System.out.println(s1);//HelloSystem.out.println(s2);//HelloWorld上述concat()方法并不會(huì)改變s1本身的內(nèi)容18String類(lèi)subString():返回字符串的一個(gè)子字符串PublicStringsubString(int

beginIndex):子串起始位置beginIndex,結(jié)束位置為字符串長(zhǎng)度-1PublicStringsubString(int

beginIndex,int

endIndex):子串起始位置beginIndex,結(jié)束位置endIndex-1Stringstr=“0123456”;Stringsub1=str.subString(2);//23456Stringsub2=str.subString(2,5);//23419Astringbufferimplementsamutablesequenceofcharacters。以緩沖區(qū)的形式存儲(chǔ)管理字符串?dāng)?shù)據(jù),而不象String那樣是immutable,如果頻繁地對(duì)某個(gè)字符串?dāng)?shù)據(jù)進(jìn)行處理,那么應(yīng)該選擇StringBuffer,因?yàn)樗庋b的數(shù)據(jù)是可變的。字符串緩沖區(qū)的長(zhǎng)度是可變的,它的增長(zhǎng)策略是將原來(lái)的長(zhǎng)度翻倍再加2。常用的方法有insert,append,substring"a"+4+"b"會(huì)被編譯器解釋為

newStringBuffer().append("a")

.append(4).append("b").toString()StringBuffer類(lèi)20StringBuffer類(lèi)Append():StringBuffer

sb=newStringBuffer();Sb.append(“Hello”);Sb.append(“World”);System.out.println(sb);//HelloWorldInsert():StringBuffer

sb=newStringBuffer(“0456”);Sb.insert(1,”123”);System.out.println(sb);//012345621String與StringBuffer的區(qū)別String類(lèi)不可編輯,StringBuffer類(lèi)可編輯Strings1=newString(“abc”);S1.concat(“def”);StringBuffersb1=newStringBuffer(“abc”);Sb1.append(“def”);System.out.println(s1);//abcSystem.out.println(sb1);//abcdef畫(huà)出其存儲(chǔ)空間22StringTokenizer類(lèi)Java.util.StringTokenizer類(lèi)提供了對(duì)字符串進(jìn)行解析和分解的功能StringTokenizer(String

str)StringTokenizer(String

str,String

delim)StringTokenizer(String

str,String

delim,boolean

returnDelims)見(jiàn)TestStringTokenizer.java23集合對(duì)象就是一組對(duì)象的表示,即用一個(gè)對(duì)象代表一組對(duì)象。集合中每個(gè)對(duì)象稱為集合的一個(gè)元素集合與數(shù)組的區(qū)別:集合中的元素都是對(duì)象的引用,基本數(shù)據(jù)類(lèi)型要使用其包裝類(lèi)才能作為集合的元素,集合中各個(gè)元素的具體類(lèi)型可以不同,只要是從相同的類(lèi)派生而來(lái)就行集合類(lèi)庫(kù)CollectionAPI24集合的分類(lèi)Java集合主要分為三種:Set(集):集合中的元素不按特定方式排序,并且沒(méi)有重復(fù)對(duì)象List(列表):集合中的元素按照索引位置排序,可以有重復(fù)元素,允許按照元素在集合中的索引位置檢索元素。與數(shù)組相似Map(映射):集合中的每個(gè)元素包含一對(duì)鍵-值對(duì)(key-value),集合中沒(méi)有重復(fù)的鍵對(duì)象,值對(duì)象可以重復(fù)25Collection接口Collection是Collection層次結(jié)構(gòu)中的根接口。Collection表示一組對(duì)象,一些collection允許有重復(fù)的元素,而另一些則不允許。一些collection是有序的,而另一些則是無(wú)序的。JDK不提供此接口的任何直接實(shí)現(xiàn):它提供更具體的子接口(如Set和List)實(shí)現(xiàn)。Java集合框架給出了幾個(gè)簡(jiǎn)單通用的集合定義,它們?cè)趈ava.util包中2627Set接口及HashSet類(lèi)Set接口是Collection的子接口,不記錄元素的順序,元素不可重復(fù)HashSet是實(shí)現(xiàn)Set接口的一個(gè)類(lèi),該類(lèi)按照哈希算法來(lái)存取集合中的對(duì)象,存取速度較快Set表示的是不重復(fù)(a.equals(b))的元素的集合Set中可以包含null對(duì)象,但最多只能有一個(gè)null對(duì)象28Set接口及HashSet類(lèi)Set<String>set=newHashSet<String>();Strings1=newString(“hello”);Strings2=s1;Strings3=newString(“world”);set.add(s1);set.add(s2);set.add(s3);System.out.println(set.size());//?參見(jiàn)Mypack1.TestHashSet.java29List接口及ArrayList,Vector及LinkedList類(lèi)List接口是Collection的子接口,其元素以線性方式存儲(chǔ),且允許有重復(fù)元素ArrayList,LinkedList,Vector是List接口的重要實(shí)現(xiàn),是Java中的“動(dòng)態(tài)數(shù)組”,元素可以加入和移除ArrayList與Vector類(lèi)似,區(qū)別是:Vector是線程安全的(synchronized)30ArrayListArrayList代表長(zhǎng)度可變的數(shù)組,允許對(duì)元素進(jìn)行快速的隨機(jī)訪問(wèn),但是插入與刪除元素的速度較慢參見(jiàn)mypack1.TestArrayList.java31LinkedListLinkedList在實(shí)現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu),插入刪除元素的速度較快,隨機(jī)訪問(wèn)則相對(duì)較慢,可作為堆棧、隊(duì)列使用LinkedList實(shí)現(xiàn)隊(duì)列:參見(jiàn) mypack1.TestQueue.java32Vector向量Vector是java.util包中用來(lái)存放不同類(lèi)型元素的變長(zhǎng)數(shù)組其中的元素不能是簡(jiǎn)單數(shù)據(jù)類(lèi)型,如int等PublicVector(int

initCapacity,int

capacityIncrement)addElement(Object

obj)insertElement(Object,intindex)setElementAt(Object

obj,intindex)BooleanremoveElement(Object

obj)33Vector向量VoidremoveElementAt(intindex)VoidremoveAllElement()ObjectelementAt(intindex)Int

indexOf(Object

obj,int

start_index)Int

lastIndexOf(Object

obj,int

start_index)見(jiàn)PhotoAlbum.javaStack是Vector的子類(lèi),故棧中對(duì)象都是Object對(duì)象或是其子類(lèi)對(duì)象見(jiàn)mypack1.Stacks.java34接口Iterator(迭代器)和Enumeration(枚舉器)都是用來(lái)存取集合中元素的,建議用前者見(jiàn)mypack1.TestListAllElements.java列舉器Iterator&Enumeration35Map接口和Hashtable類(lèi)Map接口是將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵,每個(gè)鍵最多只能映射到一個(gè)值。Objectget(Objectkey)Objectput(Object

key,Objectvalue)Map接口的重要實(shí)現(xiàn)類(lèi)有:Hashtable,HashMap,TreeMap,Properties等。其中,Properties是Hashtable的子類(lèi),其關(guān)鍵字及值都限于String類(lèi)見(jiàn)TestHashtable.java36HashMap&Hashtable二者皆提供Map接口的實(shí)現(xiàn)。HashMap是未同步的集合,Hashtable是同步的集合。Hashtable不接受null作為key或者value。HashMap接受null作為key或者value。37Collections類(lèi)Java.util.Collections類(lèi)是一個(gè)針對(duì)List具有排序、查找、反序等功能的類(lèi)Publicstaticvoidsort(Listlist)Publicstaticvoidsort(List

list,Comparatorc)Publicstaticint

binarySearch(List

list,Objectkey)Publicstaticint

binarySearch(List

list,Object

key,Comparatorc)Note:對(duì)于binarySearch要求list已按升序排好38Collections類(lèi)比較規(guī)則:若不提供Comparator,則List中的對(duì)象必須實(shí)現(xiàn)java.lang.Comparable接口(int

compareTo(Object

obj);根據(jù)大小關(guān)系比較)提供Comparator:Int

compare(Objecto1,Objecto2)Booleanequals(Object

obj)Referencetomypack2.TestCollectionsSort.java39Generic泛型Generic是Jdk1.5新增加的Java語(yǔ)言特性適用場(chǎng)合:集合中所有元素都是同一種類(lèi)型Vectorv=newVector();V.addElement(“one”);

v.addElement(new

Person(“me”));Strings=(String)v.elementAt(0);不能保證插入的元素都是同種類(lèi)型元素取出時(shí)必須做強(qiáng)制類(lèi)型轉(zhuǎn)換40Generic泛型采用泛型的情況:Vector<String>v=newVector<String>();V.addE

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論