JAVA精華集錦_第1頁
JAVA精華集錦_第2頁
JAVA精華集錦_第3頁
JAVA精華集錦_第4頁
JAVA精華集錦_第5頁
已閱讀5頁,還剩248頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、JAVA精華集錦JAVA SE深入JAVA APILang包String類和StringBuffer類位于java.lang包中,這個包中的類使用時不用導入String類一旦初始化就不可以改變,而stringbuffer則可以。它用于封裝內(nèi)容可變的字符串。它可以使用tostring()轉(zhuǎn)換成string字符串。String x=”a”+4+”c”編譯時等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();字符串常量是一種特殊的匿名對象,String s1=”hello”;String s2=”he

2、llo”;則s1=s2;因為他們指向同一個匿名對象。如果String s1=new String(“hello”);String s2=new String(“hello”);則s1!=s2;/*逐行讀取鍵盤輸入,直到輸入為“bye”時,結(jié)束程序注:對于回車換行,在windows下面,有r和n兩個,而unix下面只有n,但是寫程序的時候都要把他區(qū)分開*/public class readlinepublic static void main(String args)String strInfo=null;int pos=0;byte buf=new byte1024;/定義一個數(shù)組,存放換行前

3、的各個字符int ch=0; /存放讀入的字符system.out.println(“Please input a string:”);while(true)trych=System.in.read(); /該方法每次讀入一個字節(jié)的內(nèi)容到ch變量中。catch(Exception e)switch(ch)case r: /回車時,不進行處理break;case n: /換行時,將數(shù)組總的內(nèi)容放進字符串中strInfo=new String(buf,0,pos); /該方法將數(shù)組中從第0個開始,到第pos個結(jié)束存入字符串。if(strInfo.equals(bye) /如果該字符串內(nèi)容為bye,

4、則退出程序。return;else /如果不為bye,則輸出,并且竟pos置為0,準備下次存入。System.out.println(strInfo);pos=0;break;default:bufpos+=(byte)ch; /如果不是回車,換行,則將讀取的數(shù)據(jù)存入數(shù)組中。String類的常用成員方法構(gòu)造方法:String(byte byte,int offset,int length);這個在上面已經(jīng)用到。equalsIgnoreCase:忽略大小寫的比較,上例中如果您輸入的是BYE,則不會退出,因為大小寫不同,但是如果使用這個方法,則會退出。indexOf(int ch);返回字符ch在

5、字符串中首次出現(xiàn)的位置substring(int benginIndex);substring(int beginIndex,int endIndex);返回字符串的子字符串,4返回從benginindex位置開始到結(jié)束的子字符串,5返回beginindex和endindex-1之間的子字符串。基本數(shù)據(jù)類型包裝類的作用是:將基本的數(shù)據(jù)類型包裝成對象。因為有些方法不可以直接處理基本數(shù)據(jù)類型,只能處理對象,例如vector的add方法,參數(shù)就只能是對象。這時就需要使用他們的包裝類將他們包裝成對象。例:在屏幕上打印出一個*組成的矩形,矩形的寬度和高度通過啟動程序時傳遞給main()方法的參數(shù)指定。p

6、ublic class testIntegerpublic static void main(String args)/main()的參數(shù)是string類型的數(shù)組,用來做為長,寬時,要轉(zhuǎn)換成整型。int w=new Integer(args0).intValue();int h=Integer.parseInt(args1);/int h=Integer.valueOf(args1).intValue();/以上為三種將字符串轉(zhuǎn)換成整形的方法。for(int i=0;ih;i+)StringBuffer sb=new StringBuffer(); /使用stringbuffer,是因為它是可

7、追加的。for(int j=0;jw;j+)sb.append(*);System.out.println(sb.toString(); /在打印之前,要將stringbuffer轉(zhuǎn)化為string類型。比較下面兩段代碼的執(zhí)行效率:(1)String sb=new String();For(int j=0;jw;j+)Sb=sb+*;(2) StringBuffer sb=new StringBuffer();For(int j=0;jjavaDateAppTodaysdateisThuDec2717:58:16CST2001Todaysdate(InternetGMT)is:27Dec200

8、109:58:16GMTTodaysdate(Locale)is:2001-12-2717:58:16Todaysyearis:101Todaysmonthis:12Todaysdateis:27Day1sdateis:WedFeb2310:12:34CST2000Day2sdateis:FriAug1213:03:00CST1996Day3sdate(GMT)is:5Aug199605:03:00GMTDay3sdate(Locale)is:1996-8-513:03:00Day3stimezoneoffsetis:-480E:javatutorialjava01日歷類Calendar在早期

9、的JDK版本中,日期(Date)類附有兩大功能:(1)允許用年、月、日、時、分、秒來解釋日期:(2)允許對表示日期的字符串進行格式化和句法分析。在JDK1.1中提供了類Calendar來完成第一種功能,類DateFormat來完成第二項功能。dateFormat是java.text包中的一個類。與Date類有所不同的是,DateFormat類接受用各種語言和不同習慣表示的日期字符串。本節(jié)將介紹java.util包中的類Calendar及其它新增加的相關的類。類Calendar是一個抽象類,它完成日期(Date)類和普通日期表示法(即用一組整型域如YEAR,MONTH,DAY,HOUR表示日期)

10、之間的轉(zhuǎn)換。由于所使用的規(guī)則不同,不同的日歷系統(tǒng)對同一個日期的解釋有所不同。在JDK1.1中提供了Calendar類一個子類GregorianCalendar?它實現(xiàn)了世界上普遍使用的公歷系統(tǒng)。當然用戶也可以通過繼承Calendar類,并增加所需規(guī)則,以實現(xiàn)不同的日歷系統(tǒng)。第GregorianCalendar繼承了Calendar類。本節(jié)將在介紹類GregorianCalendar的同時順帶介紹Calendar類中的相關方法。類GregorianCalendar提供了七種構(gòu)造函數(shù):(1)publicGregorianCalendar()創(chuàng)建的對象中的相關值被設置成指定時區(qū),缺省地點的當前時間,

11、即程序運行時所處的時區(qū)、地點的當前時間。(2)publicGregorianCalendar(TimeZonezone)創(chuàng)建的對象中的相關值被設置成指定時區(qū)zone,缺省地點的當前時間。(3)publicGregorianCalendar(LocaleaLocale)創(chuàng)建的對象中的相關值被設置成缺省時區(qū),指定地點aLocale的當前時間。(4)publicGregorianCalendar(TimeZonezone,LocalaLocale)創(chuàng)建的對象中的相關值被設置成指定時區(qū),指定地點的當前時間。上面使用到的類TimeZone的性質(zhì)如下:TimeZone是java.util包中的一個類,其中

12、封裝了有關時區(qū)的信息。每一個時區(qū)對應一組ID。類TimeZone提供了一些方法完成時區(qū)與對應ID兩者之間的轉(zhuǎn)換。()已知某個特定的ID,可以調(diào)用方法publicstaticsynchronizedTimeZonegetTimeZone(StringID)來獲取對應的時區(qū)對象。例太平洋時區(qū)的ID為PST,用下面的方法可獲取對應于太平洋時區(qū)的時區(qū)對象:TimeZonetz=TimeZone.getTimeZone(PST);調(diào)用方法getDefault()可以獲取主機所處時區(qū)的對象。TimeZonetz=TimeZone.getDefault();()調(diào)用以下方法可以獲取時區(qū)的IDpublicst

13、aticsynchronizedStringgetavailableIDs(intrawOffset)根據(jù)給定時區(qū)偏移值獲取ID數(shù)組。同一時區(qū)的不同地區(qū)的ID可能不同,這是由于不同地區(qū)對是否實施夏時制意見不統(tǒng)一而造成的。例Strings=TimeZone.getAvailableIDs(-7*60*60*1000);打印s,結(jié)果為s0=PNT,s1=MSTpublicstaticsynchronizedStringgetAvailableIDs()獲取提供的所有支持的ID。publicStringgetID()獲取特定時區(qū)對象的ID。例TimeZonetz=TimeZone.getDefaul

14、t();Strings=tz.getID();打印s,結(jié)果為s=CTT。上面使用類的對象代表了一個特定的地理、政治或文化區(qū)域。Locale只是一種機制,它用來標識一類對象,Local本身并不包含此類對象。要獲取一個Locale的對象有兩種方法:()調(diào)用Locale類的構(gòu)造方法Locale(Stringlanguage,Stringcountry)Locale(Stringlanguage,Stringcountry,Stringvariant)參數(shù)說明:language?在ISO-639中定義的代碼,由兩個小寫字母組成。country?在ISO-3166中定義的代碼,由兩個大寫字母組成。var

15、iant?售貨商以及特定瀏覽器的代碼,例如使用WIN代表Windows。()調(diào)用Locale類中定義的常量Local類提供了大量的常量供用戶創(chuàng)建Locale對象。例Locale.CHINA為中國創(chuàng)建一個Locale的對象。類TimeZone和類Locale中的其它方法,讀者可查閱API。(5)publicGregorianCalendar(intyear,intmonth,intdate)(6)publicGregorianCalendar(intyear,intmonth,intdate,inthour,intminute)(7)publicGregorianCalendar(intyear

16、,intmonth,intdate,inthour,intminute,intsecond)用給定的日期和時間創(chuàng)建一個GregorianCalendar的對象。參數(shù)說明:year-設定日歷對象的變量YEAR;month-設定日歷對象的變量MONTH;date-設定日歷對象的變量DATE;hour-設定日歷對象的變量HOUR_OF_DAY;minute-設定日歷對象的變量MINUTE;second-設定日歷對象的變量SECOND。與Date類中不同的是year的值沒有1900這個下限,而且year的值代表實際的年份。month的含義與Date類相同,0代表1月,11代表12月。例Gregoria

17、nCalendarcal=newGregorianCalendar(1991,2,4)cal的日期為1991年3月4號。除了與Date中類似的方法外,Calendar類還提供了有關方法對日歷進行滾動計算和數(shù)學計算。計算規(guī)則由給定的日歷系統(tǒng)決定。進行日期計算時,有時會遇到信息不足或信息不實等特殊情況。Calendar采取了相應的方法解決這些問題。當信息不足時將采用缺省設置,在GregorianCalendar類中缺省設置一般為YEAR=1970,MONTH=JANUARY,DATE=1。當信息不實時,Calendar將按下面的次序優(yōu)先選擇相應的Calendar的變量組合,并將其它有沖突的信息丟棄

18、。MONTH+DAY_OF_MONTHMONTH+WEEK_OF_MONTH+DAY_OF_WEEKMONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEKDAY_OF+YEARDAY_OF_WEEK_WEEK_OF_YEARHOUR_OF_DAY隨機數(shù)類RandomJava實用工具類庫中的類java.util.Random提供了產(chǎn)生各種類型隨機數(shù)的方法。它可以產(chǎn)生int、long、float、double以及Goussian等類型的隨機數(shù)。這也是它與java.lang.Math中的方法Random()最大的不同之處,后者只產(chǎn)生double型的隨機數(shù)。類Random中的方法

19、十分簡單,它只有兩個構(gòu)造方法和六個普通方法。構(gòu)造方法:(1)publicRandom()(2)publicRandom(longseed)Java產(chǎn)生隨機數(shù)需要有一個基值seed,在第一種方法中基值缺省,則將系統(tǒng)時間作為seed。普通方法:(1)publicsynonronizedvoidsetSeed(longseed)該方法是設定基值seed。(2)publicintnextInt()該方法是產(chǎn)生一個整型隨機數(shù)。(3)publiclongnextLong()該方法是產(chǎn)生一個long型隨機數(shù)。(4)publicfloatnextFloat()該方法是產(chǎn)生一個Float型隨機數(shù)。(5)publ

20、icdoublenextDouble()該方法是產(chǎn)生一個Double型隨機數(shù)。(6)publicsynchronizeddoublenextGoussian()該方法是產(chǎn)生一個double型的Goussian隨機數(shù)。例1.2RandomApp.java。/importjava.lang.*;importjava.util.Random;publicclassRandomApppublicstaticvoidmain(Stringargs)Randomran1=newRandom();Randomran2=newRandom(12345);/創(chuàng)建了兩個類Random的對象。System.out.

21、println(The1stsetofrandomnumbers:);System.out.println(tInteger:+ran1.nextInt();System.out.println(tLong:+ran1.nextLong();System.out.println(tFloat:+ran1.nextFloat();System.out.println(tDouble:+ran1.nextDouble();System.out.println(tGaussian:+ran1.nextGaussian();/產(chǎn)生各種類型的隨機數(shù)System.out.print(The2ndsetof

22、randomnumbers:);for(inti=0;ijavaRandomAppThe1stsetofrandomnumbers:Integer:-173899656Long:8056223819738127077Float:0.6293638Double:0.7888394520265607Gaussian:0.5015701094568733The2ndsetofrandomnumbers:1553932502-2090749135-287790814-355989640-716867186E:java01向量類VectorJava.util.Vector提供了向量(Vector)類以實

23、現(xiàn)類似動態(tài)數(shù)組的功能。在Java語言中。正如在一開始就提到過,是沒有指針概念的,但如果能正確靈活地使用指針又確實可以大大提高程序的質(zhì)量,比如在C、C+中所謂“動態(tài)數(shù)組”一般都由指針來實現(xiàn)。為了彌補這點缺陷,Java提供了豐富的類庫來方便編程者使用,Vector類便是其中之一。事實上,靈活使用數(shù)組也可完成向量類的功能,但向量類中提供的大量方法大大方便了用戶的使用。創(chuàng)建了一個向量類的對象后,可以往其中隨意地插入不同的類的對象,既不需顧及類型也不需預先選定向量的容量,并可方便地進行查找。對于預先不知或不愿預先定義數(shù)組大小,并需頻繁進行查找、插入和刪除工作的情況,可以考慮使用向量類。向量類提供了三種構(gòu)

24、造方法:publicvector()publicvector(intinitialcapacity,intcapacityIncrement)publicvector(intinitialcapacity)使用第一種方法,系統(tǒng)會自動對向量對象進行管理。若使用后兩種方法,則系統(tǒng)將根據(jù)參數(shù)initialcapacity設定向量對象的容量(即向量對象可存儲數(shù)據(jù)的大小),當真正存放的數(shù)據(jù)個數(shù)超過容量時,系統(tǒng)會擴充向量對象的存儲容量。參數(shù)capacityIncrement給定了每次擴充的擴充值。當capacityIncrement為0時,則每次擴充一倍。利用這個功能可以優(yōu)化存儲。在Vector類中提供了

25、各種方法方便用戶使用:插入功能(1)publicfinalsynchronizedvoidaddElement(Objectobj)將obj插入向量的尾部。obj可以是任何類的對象。對同一個向量對象,可在其中插入不同類的對象。但插入的應是對象而不是數(shù)值,所以插入數(shù)值時要注意將數(shù)值轉(zhuǎn)換成相應的對象。例要插入一個整數(shù)1時,不要直接調(diào)用v1.addElement(1),正確的方法為:Vectorv1=newVector();Integerinteger1=newInteger(1);v1.addElement(integer1);(2)publicfinalsynchronizedvoidsetEl

26、ementAt(objectobj,intindex)將index處的對象設成obj,原來的對象將被覆蓋。(3)publicfinalsynchronizedvoidinsertElementAt(Objectobj,intindex)在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。刪除功能(1)publicfinalsynchronizedvoidremoveElement(Objectobj)從向量中刪除obj。若有多個存在,則從向量頭開始試,刪除找到的第一個與obj相同的向量成員。(2)publicfinalsynchronizedvoidremoveAllElem

27、ent()刪除向量中所有的對象。(3)publicfinalsynchronizedvoidremoveElementlAt(intindex)刪除index所指的地方的對象。查詢搜索功能(1)publicfinalintindexOf(Objectobj)從向量頭開始搜索obj,返回所遇到的第一個obj對應的下標,若不存在此obj,返回-1。(2)publicfinalsynchronizedintindexOf(Objectobj,intindex)從index所表示的下標處開始搜索obj。(3)publicfinalintlastIndexOf(Objectobj)從向量尾部開始逆向搜索

28、obj。(4)publicfinalsynchronizedintlastIndexOf(Objectobj,intindex)從index所表示的下標處由尾至頭逆向搜索obj。(5)publicfinalsynchronizedObjectfirstElement()獲取向量對象中的首個obj。(6)publicfinalsynchronizedObjectlastelement()獲取向量對象中的最后一個obj。了解了向量的最基本的方法后,我們來看一下例8.3VectorApp.java。例1.3VectorApp.java。importjava.util.Vector;importjav

29、a.lang.*;/這一句不應該要,但原文如此importjava.util.Enumeration;publicclassVectorApppublicstaticvoidmain(Stringargs)Vectorv1=newVector();Integerinteger1=newInteger(1);v1.addElement(one);/加入的為字符串對象v1.addElement(integer1);v1.addElement(integer1);/加入的為Integer的對象v1.addElement(two);v1.addElement(newInteger(2);v1.addE

30、lement(integer1);v1.addElement(integer1);System.out.println(Thevectorv1is:nt+v1);/將v1轉(zhuǎn)換成字符串并打印v1.insertElementAt(three,2);v1.insertElementAt(newFloat(3.9),3);System.out.println(Thevectorv1(usedmethodinsertElementAt()is:nt+v1);/往指定位置插入新的對象,指定位置后的對象依次往后順延v1.setElementAt(four,2);System.out.println(Thev

31、ectorv1(usedmethodsetElementAt()is:nt+v1);/將指定位置的對象設置為新的對象v1.removeElement(integer1);/從向量對象v1中刪除對象integer1由于存在多個integer1所以從頭開始/找,刪除找到的第一個integer1Enumerationenum=v1.elements();System.out.print(Thevectorv1(usedmethodremoveElement()is:);while(enum.hasMoreElements()System.out.print(enum.nextElement()+);

32、System.out.println();/使用枚舉類(Enumeration)的方法來獲取向量對象的每個元素System.out.println(Thepositionofobject1(top-to-bottom):+v1.indexOf(integer1);System.out.println(Thepositionofobject1(tottom-to-top):+v1.lastIndexOf(integer1);/按不同的方向查找對象integer1所處的位置v1.setSize(4);System.out.println(Thenewvector(resizedthevector)

33、is:+v1);/重新設置v1的大小,多余的元素被行棄運行結(jié)果:E:java01javaVectorAppThevectorv1is:one,1,1,two,2,1,1Thevectorv1(usedmethodinsertElementAt()is:one,1,three,3.9,1,two,2,1,1Thevectorv1(usedmethodsetElementAt()is:one,1,four,3.9,1,two,2,1,1Thevectorv1(usedmethodremoveElement()is:onefour3.91two211Thepositionofobject1(top-

34、to-bottom):3Thepositionofobject1(tottom-to-top):7Thenewvector(resizedthevector)is:one,four,3.9,1E:java01從例1.3運行的結(jié)果中可以清楚地了解上面各種方法的作用,另外還有幾點需解釋。(1)類Vector定義了方法publicfinalintsize()此方法用于獲取向量元素的個數(shù)。它的返回值是向是中實際存在的元素個數(shù),而非向量容量??梢哉{(diào)用方法capactly()來獲取容量值。方法:publicfinalsynchronizedvoidsetsize(intnewsize)此方法用來定義向量大

35、小。若向量對象現(xiàn)有成員個數(shù)已超過了newsize的值,則超過部分的多余元素會丟失。(2)程序中定義了Enumeration類的一個對象Enumeration是java.util中的一個接口類,在Enumeration中封裝了有關枚舉數(shù)據(jù)集合的方法。在Enumeration中提供了方法hawMoreElement()來判斷集合中是束還有其它元素和方法nextElement()來獲取下一個元素。利用這兩個方法可以依次獲得集合中元素。Vector中提供方法:publicfinalsynchronizedEnumerationelements()此方法將向量對象對應到一個枚舉類型。java.util包

36、中的其它類中也大都有這類方法,以便于用戶獲取對應的枚舉類型。棧類StackStack類是Vector類的子類。它向用戶提供了堆棧這種高級的數(shù)據(jù)結(jié)構(gòu)。棧的基本特性就是先進后出。即先放入棧中的元素將后被推出。Stack類中提供了相應方法完成棧的有關操作?;痉椒ǎ簆ublicObjectpush(ObjectHem)將Hem壓入棧中,Hem可以是任何類的對象。publicObjectpop()彈出一個對象。publicObjectpeek()返回棧頂元素,但不彈出此元素。publicintsearch(Objectobj)搜索對象obj,返回它所處的位置。publicbooleanempty()判

37、別棧是否為空。例1.4StackApp.java使用了上面的各種方法。例1.4StackApp.java。importjava.lang.*;importjava.util.*;publicclassStackApppublicstaticvoidmain(Stringargs)Stacksta=newStack();sta.push(Apple);sta.push(banana);sta.push(Cherry);/壓入的為字符串對象sta.push(newInteger(2);/壓入的為Integer的對象,值為2sta.push(newFloat(3.5);/壓入的為Float的對象,值

38、為3.5System.out.println(Thestackis,+sta);/對應棧staSystem.out.println(Thetopofstackis:+sta.peek();/對應棧頂元素,但不將此元素彈出System.out.println(ThepositionofobjectCherryis:+sta.search(cherry);/打印對象Cherry所處的位置System.out.print(Poptheelementofthestack:);while(!sta.empty()System.out.print(sta.pop()+);System.out.printl

39、n();/將棧中的元素依次彈出并打印。與第一次打印的sta的結(jié)果比較,可看出棧/先進后出的特點運行結(jié)果(略)哈希表類Hashtable哈希表是一種重要的存儲方式,也是一種常見的檢索方法。其基本思想是將關系碼的值作為自變量,通過一定的函數(shù)關系計算出對應的函數(shù)值,把這個數(shù)值解釋為結(jié)點的存儲地址,將結(jié)點存入計算得到存儲地址所對應的存儲單元。檢索時采用檢索關鍵碼的方法?,F(xiàn)在哈希表有一套完整的算法來進行插入、刪除和解決沖突。在Java中哈希表用于存儲對象,實現(xiàn)快速檢索。Java.util.Hashtable提供了種方法讓用戶使用哈希表,而不需要考慮其哈希表真正如何工作。哈希表類中提供了三種構(gòu)造方法,分別

40、是:publicHashtable()publicHashtable(intinitialcapacity)publicHashtable(intinitialCapacity,floatloadFactor)參數(shù)initialCapacity是Hashtable的初始容量,它的值應大于0。loadFactor又稱裝載因子,是一個0.0到0.1之間的float型的浮點數(shù)。它是一個百分比,表明了哈希表何時需要擴充,例如,有一哈希表,容量為100,而裝載因子為0.9,那么當哈希表90%的容量已被使用時,此哈希表會自動擴充成一個更大的哈希表。如果用戶不賦這些參數(shù),系統(tǒng)會自動進行處理,而不需要用戶操心

41、。Hashtable提供了基本的插入、檢索等方法。插入publicsynchronizedvoidput(Objectkey,Objectvalue)給對象value設定一關鍵字key,并將其加到Hashtable中。若此關鍵字已經(jīng)存在,則將此關鍵字對應的舊對象更新為新的對象Value。這表明在哈希表中相同的關鍵字不可能對應不同的對象(從哈希表的基本思想來看,這也是顯而易見的)。檢索publicsynchronizedObjectget(Objectkey)根據(jù)給定關鍵字key獲取相對應的對象。publicsynchronizedbooleancontainsKey(Objectkey)判斷哈

42、希表中是否包含關鍵字key。publicsynchronizedbooleancontains(Objectvalue)判斷value是否是哈希表中的一個元素。刪除publicsynchronizedobjectremove(objectkey)從哈希表中刪除關鍵字key所對應的對象。publicsynchronizedvoidclear()清除哈希表另外,Hashtalbe還提供方法獲取相對應的枚舉集合:publicsynchronizedEnumerationkeys()返回關鍵字對應的枚舉對象。publicsynchronizedEnumerationelements()返回元素對應的枚

43、舉對象。例1.5Hashtable.java給出了使用Hashtable的例子。例1.5Hashtalbe.java。/importjava.lang.*;importjava.util.Hashtable;importjava.util.Enumeration;publicclassHashApppublicstaticvoidmain(Stringargs)Hashtablehash=newHashtable(2,(float)0.8);/創(chuàng)建了一個哈希表的對象hash,初始容量為2,裝載因子為0.8hash.put(Jiangsu,Nanjing);/將字符串對象“Jiangsu”給定一

44、關鍵字“Nanjing”,并將它加入hashhash.put(Beijing,Beijing);hash.put(Zhejiang,Hangzhou);System.out.println(Thehashtablehash1is:+hash);System.out.println(Thesizeofthishashtableis+hash.size();/打印hash的內(nèi)容和大小Enumerationenum1=hash.elements();System.out.print(Theelementofhashis:);while(enum1.hasMoreElements()System.ou

45、t.print(enum1.nextElement()+);System.out.println();/依次打印hash中的內(nèi)容if(hash.containsKey(Jiangsu)System.out.println(ThecapatialofJiangsuis+hash.get(Jiangsu);hash.remove(Beijing);/刪除關鍵字Beijing對應對象System.out.println(Thehashtablehash2is:+hash);System.out.println(Thesizeofthishashtableis+hash.size();運行結(jié)果:The

46、hashtablehash1is:Beijing=Beijing,Zhejiang=Hangzhou,Jiangsu=NanjingThesizeofthishashtableis3Theelementofhashis:BeijingHangzhouNanjingThecapatialofJiangsuisNanjingThehashtablehash2is:Zhejiang=Hangzhou,Jiangsu=NanjingThesizeofthishashtableis2Hashtable是Dictionary(字典)類的子類。在字典類中就把關鍵字對應到數(shù)據(jù)值。字典類是一個抽象類。在java

47、.util中還有一個類Properties,它是Hashtable的子類。用它可以進行與對象屬性相關的操作。位集合類BitSet位集合類中封裝了有關一組二進制數(shù)據(jù)的操作。我們先來看一下例8.6BitSetApp.java。例8.6BitSetApp.java/importjava.lang.*;importjava.util.BitSet;publicclassBitSetAppprivatestaticintn=5;publicstaticvoidmain(Stringargs)BitSetset1=newBitSet(n);for(inti=0;iN;I+) SET1.SET(I

48、);/將set1的各位賦1,即各位均為trueBitSetset2=newBitSet();set2=(BitSet)set1.clone();/set2為set1的拷貝set1.clear(0);set2.clear(2);/將set1的第0位set2的第2位清零System.out.println(Theset1is:+set1);/直接將set1轉(zhuǎn)換成字符串輸出,輸出的內(nèi)容是set1中值true所處的位置/打印結(jié)果為Theset1is:1,2,3,4System.out.println(Thehashcodeofset2is:+set2.hashCode();/打印set2的hashCo

49、deprintbit(set1,set1);printbit(set2,set2);/調(diào)用打印程序printbit(),打印對象中的每一個元素/打印set1的結(jié)果為Thebitset1is:falsetruetruetruetrueset1.and(set2);printbit(set1andset2,set1);/完成set1andset2,并打印結(jié)果set1.or(set2);printbit(set1orset2,set1);/完成set1orset2,并打印結(jié)果set1.xor(set2);printbit(set1xorset2,set1);/完成set1xorset2,并打印結(jié)果/

50、打印BitSet對象中的內(nèi)容publicstaticvoidprintbit(Stringname,BitSetset)System.out.print(Thebit+name+is:);for(inti=0;iN;I+)System.out.print(set.get(i)+);System.out.println();運行結(jié)果:Theset1is:1,2,3,4Thehashcodeofset2is:1225Thebitset1is:falsetruetruetruetrueThebitset2is:truetruefalsetruetrueThebitset1andset2is:fals

51、etruefalsetruetrueThebitset1orset2is:truetruefalsetruetrueThebitset1xorset2is:falsefalsefalsefalsefalse程序中使用了BitSet類提供的兩種構(gòu)造方法:publicBitSet();publicBitSet(intn);參數(shù)n代表所創(chuàng)建的BitSet類的對象的大小。BitSet類的對象的大小在必要時會由系統(tǒng)自動擴充。其它方法:publicvoidset(intn)將BitSet對象的第n位設置成1。publicvoidclear(intn)將BitSet對象的第n位清零。publicboolea

52、nget(intn)讀取位集合對象的第n位的值,它獲取的是一個布爾值。當?shù)趎位為1時,返回true;第n位為0時,返回false。另外,如在程序中所示,當把一BitSet類的對象轉(zhuǎn)換成字符串輸出時,輸出的內(nèi)容是此對象中true所處的位置。在BitSet中提供了一組位操作,分別是:publicvoidand(BitSetset)publicvoidor(BitSetset)publicvoidxor(BitSetset)利用它們可以完成兩個位集合之間的與、或、異或操作。BitSet類中有一方法publicintsize()來取得位集合的大小,它的返回值與初始化時設定的位集合大小n不一樣,一般為6

53、4。Vector類與Enumeration接口Vector類用于保存一組對象,由于java不支持動態(tài)數(shù)組,Vector可以用于實現(xiàn)跟動態(tài)數(shù)組差不多的功能。如果要將一組對象存放在某種數(shù)據(jù)結(jié)構(gòu)中,但是不能確定對象的個數(shù)時,Vector是一個不錯的選擇。例:將鍵盤上輸入的一個數(shù)字序列的每位數(shù)字存儲在vector對象中,然后在屏幕上打印出各位數(shù)字相加的結(jié)果。import java.util.*; /Vector類和Enumeration接口都在這個包中public class TestVectorpublic static void main(String args)Vector v=new Vect

54、or();int b=0;int num=0;System.out.println(Please enter number:);while(true)tryb=System.in.read(); /從鍵盤讀入一個字節(jié)內(nèi)容catch(Exception e)e.printStackTrace();if(b=r|b=n) /如果是回車或換行的話,則退出while循環(huán),即一串數(shù)據(jù)輸入完成break;elsenum=b-0;/*由于輸入的是字符數(shù)字,它的數(shù)值是它的ascii碼,例如0=32;1=33,所以要想讓輸入的1在計算機里為1,必須減去32,即0*/v.addElement(new Intege

55、r(num); /將數(shù)字存入vectorint sum=0;Enumeration e=v.elements();/取出Vector中的所有元素,必須使用elements()方法,它返回一個Enumeration接口。while(e.hasMoreElements()/如果當前指示器還指向一個對象,即還有數(shù)據(jù)Integer intobj=(Integer)e.nextElement();/取出當前指示器所指的對象,并將指示器指向下一個對象。sum+=Value(); /將Integer對象中所包裝的整數(shù)取出來,并且加到sum中。System.out.println(sum);/打印出這個和En

56、umeration的nextelement()方法返回的是指示器指示的對象,然后將指示器指向下一個對象。由于vector可以存儲各種類型的對象,所以編譯器無法知道存儲的是什么類型的對象,所以即使我們知道里面存儲的是什么類型的,也要顯示的說明它是什么類型的,如本例中的(Integer)e.nextElement();Enumeration接口實現(xiàn)了一種機制,通過這種機制,我們就可以只用hasMoreElements()方法以及nextElement()方法就可以實現(xiàn)所有對象的訪問。Collection接口與Iterator接口Collection接口的實現(xiàn)類跟Vector相似。要從實現(xiàn)了Coll

57、ection接口的類的實例中取出保存在其中的元素對象,必須通過Collection接口的Iterator()方法,返回一個Iterator接口。Iterator接口與Enumeration接口非常相似。該接口的優(yōu)點是其中的方法名比較簡短。Arraylist類實現(xiàn)了Collection接口例:將上例改寫為用ArrayList類和Iterator接口來實現(xiàn)。import java.util.*;public class TestCollectionpublic static void main(String args)ArrayList v=new ArrayList();int b=0;int

58、num=0;System.out.println(Please enter number:);while(true)tryb=System.in.read();catch(Exception e)e.printStackTrace();if(b=r|b=n)break;elsenum=b-0;v.add(new Integer(num); /方法為add()而不是addelement()int sum=0;Iterator e=v.iterator();while(e.hasNext()/判斷是否有數(shù)據(jù)時,使用的是hasNext()方法Integer intobj=(Integer)e.nex

59、t(); /取數(shù)據(jù)時使用next()方法,而不是nextElement()sum+=Value();System.out.println(sum);這兩組實現(xiàn)的結(jié)果都是一樣的,那什么時候使用哪種呢?Vector類中的所有方法都是線程同步的,所有有兩個以上的線程訪問并發(fā)訪問vector對象時,是安全的,但是只有一個線程訪問時,仍然存在同步監(jiān)視器檢查的情況,需要額外的開銷,影響了效率。而ArrayList中的所有方法是不同步的,所以程序中如果不存在多線程安全的問題,則ArrayList比Vector的效率高。如果存在多線程安全的問題,使用ArrayList要自己編寫同步處理,而使用Vector則不

60、要。Collection,Set,List的區(qū)別如下:Set,List是Collection的子類。Collection各元素對象之間沒有指定的順序,允許有重復元素和多個Null元素對象。所以不可以排序,也不可以找出第幾個第幾個元素。Set各元素對象之間沒有指定的順序,不允許有重復元素,最多允許有一個Null元素對象。List各元素對象之間有指定的順序,允許有重復元素和多個Null元素對象。import java.util.*;public class TestSortpublic static void main(String args)ArrayList al=new ArrayList(

溫馨提示

  • 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

提交評論