java一、網(wǎng)絡(luò)編程部分_第1頁
java一、網(wǎng)絡(luò)編程部分_第2頁
java一、網(wǎng)絡(luò)編程部分_第3頁
java一、網(wǎng)絡(luò)編程部分_第4頁
java一、網(wǎng)絡(luò)編程部分_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目一、網(wǎng)絡(luò)編程部分 、URL類 、類 、類 二、I/O流部 、類 、接口FilenameFilter(策略模式 1、字節(jié)流(輸入流 、類InputStream(所有輸入流的父類 、類 、類BufferedInputStream(緩沖流 2、字節(jié)流(輸出流 、類OutputStream(所有輸出流的父類 、類FilterOutputStream(過濾流 、類BufferedOutputStream(緩沖流 3、字符流(輸入流 1、類Reader(抽象類 2、類 3、類 4、字符流(輸出流 1、類Writer(抽象類 2、類 3、類 4、類 三、反射部 1、類 2、類 3、類 4、類 5、類 6、類 6、類 四、其 1、類 2、類 一、網(wǎng)絡(luò)編程部分、URL類類URL代表一個(gè)統(tǒng)一資源定位符,它是指向互聯(lián)網(wǎng)“資源”的指針。資源可以是簡單的文件 ,也可以是對(duì)更為復(fù)雜的對(duì)象的,例如對(duì)數(shù)據(jù)庫或搜索引擎的查詢。返回一個(gè)URLConnection對(duì)象,它表示到URL所的對(duì)象的連接SocketImpl套接字實(shí)現(xiàn)的套接字工廠來配置它自身,從而創(chuàng)建適合本地的套接字。套接字的實(shí)際工作由SocketImpl類的實(shí)例執(zhí)行應(yīng)用程序通過更改創(chuàng)建套接字 二、I/O流部publicclassFileextendsObjectimplementsSerializable,文件 路徑名的抽象表示形式用戶界面和操作系統(tǒng)使用與系統(tǒng)相關(guān)的路徑名字符串來命名文件和 呈現(xiàn)分層路徑名的一個(gè)抽象的、與系統(tǒng)無關(guān)的視圖。抽象路徑名有兩個(gè)組件一個(gè)可選的與系統(tǒng)有關(guān)的前綴字符串,比如盤符,"/"表示UNIX中的 表示W(wǎng)indowsUNC路徑名。零個(gè)或字符串名稱的序列抽象路徑名中的第一個(gè)名稱是名,對(duì)于WindowsUNC路徑名則是主機(jī)名。抽象路徑名中第一個(gè)名稱之后的每個(gè)名稱表示一個(gè);最后一個(gè)名稱既可以表示,也可以表示文件??粘橄舐窂矫麤]有前綴和名稱序列。默認(rèn)名稱分隔符由系統(tǒng)屬性file.separator定義,可通過此類的公共靜態(tài)字段separator和separatorChar使其可用、接FilenameFilter(策略模式publicinterface WindowToolkit的文件對(duì)話框組件使用這些實(shí)例過濾File類的list方法中的 booleanaccept(File dir-被找到的文件所在 name當(dāng)且僅當(dāng)該名稱應(yīng)該包含在文件列表中時(shí)返回true;否則返回false1、字節(jié)流(輸入流InputStreampublicintread(byte[]throws從輸入流中一定數(shù)量的字節(jié),并將其在緩沖區(qū)數(shù)組b中。以整如果b的長度為0,則不任何字節(jié)并返回0;否則,嘗試至少1;否則,至少一個(gè)字節(jié)并將其在b中。。將的第一個(gè)字節(jié)在元素b[0]中,下一個(gè)在b[1]中,依次類推的字節(jié)數(shù)最多等于b的長度。設(shè)k為實(shí)際的字節(jié)數(shù);這些字節(jié)將在b[0]到b[k-1]的元素中,不影響b[k]到b[b.length-1]的元素。。類InputStream的read(b)read(b,0,參數(shù)b-讀入數(shù)據(jù)的緩沖區(qū)publicclassFileInputStreamextendsInputStreamFileInputStream考慮使用FileReader。、類publicclassBufferedInputStreamextendsFilterInputStreamBufferedInputStream為另一個(gè)輸入流添加一些功能,即緩沖輸入以及支持mark和reset方法的能力。在創(chuàng)建BufferedInputStream時(shí),會(huì)創(chuàng)建一個(gè)內(nèi)操作使得在從包含的輸入流中獲取新字節(jié)之前再次自最后一次mark操作 2、字節(jié)流(輸出流 classOutputStreamextendsObjectimplementsCloseable,發(fā)送到某個(gè)。OutputStreamFilterOutputStream(過濾流publicclassFilterOutputStreamextendsOutputStream之上,它們將已存在的輸出流作為其基本數(shù)據(jù),但可能直接傳輸數(shù)據(jù)或提FilterOutputStreamOutputStreamFilterOutputStream、類publicclassBufferedOutputStreamextendsFilterOutputStream3、字符流(輸入流1Reader(抽象類 classReaderextendsObjectimplementsReadable,用于字符流的抽象類。子類必須實(shí)現(xiàn)的方法只有read(char[],int,2publicclassInputStreamReaderextendsReaderInputStreamReadercharsetInputStreamReaderread()多的字節(jié),使其超過滿足當(dāng)前操作所需的字節(jié)。BufferedReaderInputStreamReader。BufferedReader=newBufferedReader(new3publicclassBufferedReaderextendsReader從字符輸入流中文本緩沖各個(gè)字符從而實(shí)現(xiàn)字符數(shù)組和行的高效通常,Reader所作的每個(gè)請(qǐng)求都會(huì)導(dǎo)致對(duì)底層字符或字節(jié)流進(jìn)行相應(yīng)的讀BufferedReaderread()的Reader(如FileReader和InputStreamReader)。例如,BufferedReader=newBufferedReader(newread()readLine()會(huì)導(dǎo)致從文件中字節(jié),并將其轉(zhuǎn)換為字符后返回,而這是極其低效的。BufferedReaderDataInputStream,可以對(duì)將DataInputStream用于文字輸入的程序進(jìn)行本地化。4、字符流(輸出流1Writer(抽象類2publicclassOutputStreamWriterextendsWriterOutputStreamWritercharsetwrite()(或字符集)上調(diào)用編碼轉(zhuǎn)換器。為了獲得最高效率,可考慮將OutputStreamWriter包裝到Writer=newBufferedWriter(new對(duì)是一個(gè)字符它由兩個(gè)char值序列表示高項(xiàng)的范圍為到'\uDBFF',后跟范圍為'\uDC00'到'\uDFFF'的低項(xiàng)錯(cuò)誤元素指的是后面不跟低項(xiàng)的高項(xiàng),或前面沒有高項(xiàng)的低此類總是使用字符集的默認(rèn)替代序列替代錯(cuò)誤元素和不可的字符序列。如果需要地控制編碼過程,則應(yīng)該使用CharsetEncoder類。3publicclassBufferedWriterextendsWriter該類提供了newLine()方法,它使用平臺(tái)自己的行分隔符概念,此概念由系統(tǒng)line.separator('\n')BufferedWriterwrite()Writer(如FileWriters和OutputStreamWriters)。例如,PrintWriter=newPrintWriter(newBufferedWriter(newPrintWriterprint()4publicclassPrintWriterextendsWriterPrintStreamPrintStreamprintlnprintfformatI/O可能會(huì)查詢調(diào)用checkError()是否出現(xiàn)錯(cuò)誤。三、反射部JavaClass獲取Class對(duì)象的3種方式1、publicfinalclassClass<T>extendsObjectimplementsSerializable,GenericDeclaration,Type,ClassJava注釋是一種接口。每個(gè)數(shù)組屬于被為Class對(duì)象的一個(gè)類,所有具有相同元素類型和維數(shù)的數(shù)組都共享該Class對(duì)象?;镜腏ava類型(boolean、bytecharshortintlongfloatdoublevoidClassClassClassJava用類加載器中的defineClass方法自動(dòng)構(gòu)造的。以下示例使用ClassvoidprintClassName(Objectobj)System.out.println("Theclassof"+obj"is"+}還可以使用一個(gè)類字面值(JLSSection15.8.2)來獲取指定類型(void)的Class對(duì)象。例如:System.out.println("ThenameofclassFoois:2publicfinalclassFieldextendsAccessibleObjectimplementsMemberArray允許在執(zhí)行g(shù)et或set操作期間進(jìn)行擴(kuò)展轉(zhuǎn)換但如果將發(fā)生收縮轉(zhuǎn)換,則拋出一個(gè)IllegalArgumentException。3publicfinalclassMethodextendsAccessibleObjectimplementsGenericDeclaration,Method提供關(guān)于類或接口上單獨(dú)某個(gè)方法(以及如何該方法)的信息。所Method進(jìn)行收縮轉(zhuǎn)換,則會(huì)拋出IllegalArgumentException。1、Invoke()publicObjectinvoke(Object throwsIllegalAccessException,InvocationMethod動(dòng)解包,以便與基本形參相匹配,基本參數(shù)和參數(shù)都隨需服從方法調(diào)用轉(zhuǎn)換如果底層方法是靜態(tài)的,那么可以忽略指定的objnull如果底層方法所需的形參數(shù)為0,則所提供的args數(shù)組長度可以為或nullJavaLanguageSpecification,SecondEdition本類型,則數(shù)組元素被包裝在對(duì)象中;換句話說,將返回基本類型的數(shù)組。如果底層方法返回類型為void,則該調(diào)用返回null。參數(shù)obj-從中調(diào)用底層方法的對(duì)象args-用于方法調(diào)用的參數(shù)argsobj4publicfinalclassConstructor<T>extendsAccessibleObjectimplementsGenericDeclaration,Constructor提供關(guān)于類的單個(gè)構(gòu)造方法的信息以及對(duì)它的權(quán)限Constructor允許在將實(shí)參與帶有底層構(gòu)造方法的形參的newInstance()匹配5publicfinalclassArrayextendsObjectArray類提供了動(dòng)態(tài)創(chuàng)建和Java數(shù)組的方法Arraygetset則拋出IllegalArgumentException。6publicclassProxyextendsObjectimplementsSerializableProxy提供用于創(chuàng)建動(dòng)態(tài)類和實(shí)例的靜態(tài)方法它還是由這些方法創(chuàng)建的所有動(dòng)態(tài)類的超類。創(chuàng)建某一接口Foo的InvocationHandlerhandler=newMyInvocationHandler(...);ClassproxyClass=Proxy.getProxyClass(Foo.class.getClassLoader(),newClass[]{Foo.class});Foof=(Foo)proxyClass.getConstructor(newClass[]{InvocationHandler.class}).newInstance(newObject[]{handler});Foof=(Foo)newClass[]{Foo.class},表的類,該類具有下面描述的行為。接口是類實(shí)現(xiàn)的一個(gè)接口。代理實(shí)例是類的一個(gè)實(shí)例。每個(gè)實(shí)例都有一個(gè)關(guān)聯(lián)的調(diào)用處理程序?qū)ο?,它可以?shí)現(xiàn)接口InvocationHandler。通過其中一個(gè)接口的實(shí)例上的方法調(diào)用將被指派到實(shí)例的調(diào)用處理程序的Invoke方法,并傳遞實(shí)例、識(shí)別調(diào)用方法的java.lang.reflect.Method對(duì)象以及包含參數(shù)的Object類將作為實(shí)例上方法調(diào)用的結(jié)果返回。 類是公共的、最終的,而不是抽象的java.lang.reflect.Proxy義,也不會(huì)相同類加載器和帶有特定簽名的包所定義的類。由于類將實(shí)現(xiàn)所有在其創(chuàng)建時(shí)指定的接口,所以對(duì)其Class對(duì)象調(diào)getInterfaces將返回一個(gè)包含相同接口列表的數(shù)組(按其創(chuàng)建時(shí)指定的順序?qū)ζ銫lass對(duì)象調(diào)用getMethods將返回一個(gè)包括這些接口中所有方法的Method對(duì)象的數(shù)組,并且調(diào)用getMethod將會(huì)在接口中找到期望的一些方如果Proxy.isProxyClass方法傳遞類(由Proxy.getProxyClass返回Proxy.newProxyInstance返回的對(duì)象的類true,否則返回false。類的java.security.Protection與由引導(dǎo)類加載器(如碼生成。此保護(hù)域通常被授予java.security.AllPermission。每個(gè)類都有一個(gè)可以帶一個(gè)參數(shù)(接口InvocationHandler的實(shí)現(xiàn))的公共構(gòu)造方法,用于設(shè)置實(shí)例的調(diào)用處理程序。并非必須使用反射API才能公共構(gòu)造方法,通過調(diào)用Proxy.newInstance方法(將調(diào)用Proxy.getProxyClass的操作和調(diào)用帶有調(diào)用處理程序的構(gòu)造方法結(jié)合在一起)提供實(shí)例proxy和一個(gè)由其類Foo實(shí)現(xiàn)的接口,以下表達(dá)式將返proxyinstanceofClassCastException(Foo)proxyProxy.getInvocationHandler方法將返回與作為其參數(shù)傳遞的實(shí)例相關(guān)程序的Invoke方法。在實(shí)例上的java.lang.Object中的hashCode、equalstoString方法的調(diào)用將按照與編碼和指派接口方法調(diào)用相同的方式進(jìn)行編碼,并被指派到調(diào)用處理程序的invoke方法,如上所述。傳遞到invoke的Method對(duì)象的類是java.lang.Object。類不重寫從java.lang.Object繼java.lang.Object實(shí)例的操作一樣。在多接口中重復(fù)的方當(dāng)類的兩個(gè)或多個(gè)接口包含一個(gè)具有相同名稱和參數(shù)簽名的方法時(shí)類的接口順序變得非常重要。在實(shí)例上調(diào)用重復(fù)方法時(shí),傳遞到調(diào)用處理程序的Method對(duì)象沒有必要成為其類可以從接口(通過該接口調(diào)用方一個(gè)接口中的方法的Method對(duì)象包含接口的類列表中的方(直接或通過用通過哪一種類型發(fā)生。如果接口包含某一方法,它的名稱和參數(shù)簽名與java.lang.Object的hashCode、equals或toString方法相同,那么在實(shí)例上調(diào)用這樣的方法時(shí),傳遞到調(diào)用處理程序的Method對(duì)象將使java.lang.Object成為其類。換句話說,java.lang.Object公共的非最終方法理論上在所有接口之前,以便確定哪一個(gè)Method對(duì)象傳遞到調(diào)用處理程序。還要注意,當(dāng)重復(fù)方法被指派到調(diào)用處理程序時(shí),invoke檢查的異常類型,該異常類型可以使用所有接口(可以通過它調(diào)用)中方throwsinvoke異常類型,那么該實(shí)例上的調(diào)用將拋出一個(gè)檢查的UndeclaredThrowableExceptioninvoke的Method對(duì)象上調(diào)用getExceptionTypes返回的異常類型都可以由7、接口InvocationHandler(動(dòng)態(tài)必須繼承的借口publicinterfaceInvocationHandler是實(shí)例的調(diào)用處理程序?qū)崿F(xiàn)的接口法調(diào)用進(jìn)行編碼并將其指派到它的調(diào)用處理程序的invoke方法。Objectinvoke(ObjectMethodmethod,Object[]args)throws在實(shí)例上處理方法調(diào)用并返回結(jié)果。在與方法關(guān)聯(lián)的實(shí)例上調(diào)用方法時(shí),參數(shù)proxy-在其上調(diào)用方法的實(shí)method-對(duì)應(yīng)于在實(shí)例上調(diào)用的接口方法的Method實(shí)例。Method對(duì)象的類將是在其中方法的接口,該接口可以是類賴以繼承方法的接口args-包含傳入實(shí)例上方法調(diào)用的參數(shù)值的對(duì)象數(shù)組,如果接口方法不使用參數(shù)null(如java.lang.Integer或java.lang.Boolean)的實(shí)例中。返回從實(shí)例的方法調(diào)用返回的值。如果接口方法的返回類型是基本類型,則此方法返回的值一定是相應(yīng)基本包裝對(duì)象類的實(shí)例;否則,它一定是可分配到返回類型的類型。如果此方法返回的值為null并且接口方法的返回類型是基本類型,則實(shí)例上的方法調(diào)用將拋出NullPointerException。否則,如果此方法返回的值與上述接口方法的返回類型不兼容,則實(shí)例上的方法調(diào)用將拋出ClassCastException。6 classClassLoaderextendsObject稱轉(zhuǎn)換為某個(gè)文件名,然后從文件系統(tǒng)該名稱的“類文件”。每個(gè)Class對(duì)象都包含一個(gè)對(duì)定義它的ClassLoader的ClassJavaClassLoaderJavaClassLoaderClassLoader加載器("bootstrapclassloader")本身沒有父類加載器,但是可以將它用作ClassLoader實(shí)例的父類加載器。通常情況下,Java如,在UNIX系統(tǒng)中,虛擬機(jī)從CLASSPATH環(huán)境變量定義的中加載類。能是由應(yīng)用程序構(gòu)造的。defineClassbyteClass的實(shí)例。這種新定義的類的實(shí)例可以使用Class.newInstance來創(chuàng)建。類加載器所創(chuàng)建對(duì)象的方法和構(gòu)造方法可以其他類。為了確定的類Java虛擬機(jī)將調(diào)用最初創(chuàng)建該類的類加載器的loadClassClassLoaderloader =newNetworkClassLoader(host,port);Objectmain =loader.loadClass("Main",true).newInstance(); 。網(wǎng)絡(luò)類加載器子類必須定義方法findClass和loadClassData,以實(shí)現(xiàn)從網(wǎng)絡(luò)加載類組成該類的字節(jié)后,它應(yīng)該使用方法defineClass來創(chuàng)建類實(shí)例。。classNetworkClassLoaderextendsClassLoader{Stringhost;intpublicClassfindClass(Stringname){byte[]b=loadClassData(name);returndefineClass(name,b,0,}privatebyte[]loadClassData(Stringname)//loadtheclassdatafromthe }}四、集合框架中的接ArrayList底層是通過數(shù)組的的形式構(gòu)造的(適合搜索操作LinkedList是通過鏈表的的形式構(gòu)造的(適合刪除和操作1、publicinterfaceCollection<E>extendsIterable<E>Collection次結(jié)構(gòu)中的根接口。Collectioncollection元素collection何直接實(shí)現(xiàn):它提供更具體的子接口(SetList)實(shí)現(xiàn)。此接口通常用來傳遞collection,并在需要最大普遍性的地方操作這些collection。所有通用的Collection實(shí)現(xiàn)類(通常通過它的一個(gè)子接口間接實(shí)現(xiàn)Collection)void(無參數(shù))構(gòu)造方collection;Collectioncollection。實(shí)際上,后者允許用戶任何collection,以生成所需實(shí)現(xiàn)類型的一個(gè)等效collection。盡管通用的Collection實(shí)現(xiàn)都遵從它。collection的那些方法,如果此collection不支持該操作,則指定這些方法拋出UnsupportedOperationExceptioncollection無UnsupportedOperationException如果要添加的collection為空且不可修改,則對(duì)該collection調(diào)用addAll(Collection)方法時(shí),可能但并不一定拋出異常。一些collection實(shí)現(xiàn)對(duì)它們可能包含的元素有所限制。例如,某些實(shí)現(xiàn)null元素,而某些實(shí)現(xiàn)則對(duì)元素的類型有限制。試圖添加不合格的元素將拋出一個(gè)檢查的異常通常是NullPointerException或ClassCastException。collection中,將可能拋出一個(gè)異常,也可能操作成功,這取決于實(shí)現(xiàn)本由每個(gè)collection來確定其自身的同步策略。在沒有實(shí)現(xiàn)的強(qiáng)烈保證的情況器檢查collection。CollectionsFrameworkequalscontains(Objecto)方法的規(guī)范:“當(dāng)且僅當(dāng)此collection包含至少一個(gè)滿足(o==nulle==null:o.equals(e))的元素e時(shí),返回true?!睉?yīng)將此規(guī)范理解為它暗指調(diào)用具有非空參數(shù)o的Collection.contains方eo.equals(e)要避免調(diào)用equals即可,例如,通過首先比較兩個(gè)元素的哈希碼。CollectionsFrameworkObject2、publicinterfaceSet<E>extendsCollection<E>一個(gè)不包含重復(fù)元素的collection。更確切地講,set不包含滿足e1.equals(e2)e1e2,null稱所暗示的,此接口模仿了數(shù)學(xué)上的set抽象。add、equalshashCode,Set慮,它還包括了其他繼承方法的(這些的規(guī)范已經(jīng)專門針對(duì)Set接口重復(fù)元素的set(正如上面所定義的)。注:如果將可變對(duì)象用作set元素,那么必須極其。如果對(duì)象是set中某equalsset不確定的。此項(xiàng)的一個(gè)特殊情況是不允許某個(gè)set包含其自身作為元素某些set實(shí)現(xiàn)對(duì)其所包含的元素有所限制。例如,某些實(shí)現(xiàn)null元素,而某些則對(duì)其元素的類型所有限制試圖添加不合格的元素會(huì)拋出檢查的異NullPointerExceptionClassCastException。試圖查詢不合格完成該操作后不會(huì)導(dǎo)致在set中不合格的元素,則該操作可能拋出一個(gè)異3、publicinterfaceList<E>extendsCollection<E>)collection(也稱為序列)。此接口的用戶可以對(duì)列表中每個(gè)元素的插入位置進(jìn)行精確地控制。用戶可以根據(jù)元素的整數(shù)索引(在列表中的位置)與set不同,列表通常允許重復(fù)的元素。更確切地講,列表通常允許滿足e1.equals(e2)e1e2,null通常它們?cè)试S多個(gè)null元素難免有人希望通過在用戶嘗試重復(fù)元素時(shí)拋出運(yùn)行時(shí)異常的方法來重復(fù)的列表,但我們希望這種用法越少越好。Listiterator、add、remove、equalshashCode括了其他繼承方法的。List接口提供了4種對(duì)列表元素進(jìn)行定(索引方法列(像Java數(shù)組一樣0(LinkedList)ListListIteratorIteratorList接口提供了兩種搜索指定對(duì)象的方法。從性能的觀點(diǎn)來看,應(yīng)該使用List接口提供了兩種在列表的任意位置高效和移除多個(gè)元素的方法表上,equals和hashCode方法不再是定義良好的。某些列表實(shí)現(xiàn)對(duì)列表可能包含的元素有限制。例如,某些實(shí)現(xiàn)null元素,而某些實(shí)現(xiàn)則對(duì)元素的類型有限制試圖添加不合格的元素會(huì)拋出檢查的異常,通常是NullPointerException或ClassCastException。試圖查詢不合格false;某些實(shí)現(xiàn)會(huì)采用前完成該操作后不會(huì)導(dǎo)致在列表中不合格的元素,則該操作可能拋出一個(gè)異4、publicinterfaceSortedSet<E>extendsSet<E>進(jìn)一步提供關(guān)于元素的總體排序Set。這些元素使用其自然順序進(jìn)行排序,setComparatorsetSortedMap的set對(duì)應(yīng)接口)。有序set的所有元素都必須實(shí)現(xiàn)Comparable接口(或者被指定的比較器所接受)。另外,所有這些元素都必須是可互相比較的:對(duì)于有序set中的任意兩個(gè)元素e1和e2,執(zhí)行pareTo(e2)(或 或者構(gòu)造方法調(diào)用拋出ClassCastException。注意,如果有序set要正確實(shí)現(xiàn)Set接口,則有序set所維持的順序(無論是否提供了明確的比較器)都必須equals致。(有關(guān)equals致的精確定義,請(qǐng)參閱Comparable接口或Comparator接口。)這是因?yàn)镾et接equalssetcompareTo(compare)方法對(duì)所有元素進(jìn)行比較,因此從有序set的角度來看,此方法認(rèn)為相等的兩equalsset定義良好的,只不過沒有遵守Set接口的常規(guī)協(xié)定。set4:1)void(無參數(shù)set2)的比較器進(jìn)行排序。3)Collectionset,其元素與參數(shù)相同,按照元素的自然順序進(jìn)行排序。4)SortedSetset,其元素和排set們包括點(diǎn),但不包端點(diǎn)(如果適用)。如果需要一個(gè)閉區(qū)間(同時(shí)包含兩個(gè)端點(diǎn)lowEndpointsuccessor(highEndpoint)sset。下面的語句將得到一個(gè)包含s中從low到high(包括)所有字符串的視圖:SortedSet<String>sub=s.subSet(low,可使用類似的技術(shù)生成開區(qū)(兩個(gè)端點(diǎn)都不包括s從low到high(不包括)所有字符串的視圖:SortedSet<String>sub=s.subSet(low+"\0",此接口是JavaCollectionsFramework5、publicinterface此接口取代DictionaryMap接口提供三種collection視圖,允許以鍵集、值集或鍵-值關(guān)系集的形式查看某個(gè)的內(nèi)容。順序定義為迭代器在的collection視圖上返回其元素的順序。某些實(shí)現(xiàn)可明確保證其順序,如TreeMap類;另一些實(shí)現(xiàn)則不保證順序,如HashMap類。止的一種特殊情況是不允許某個(gè)將自身作為一個(gè)鍵包含雖然允許某個(gè)將自身作為值包含,但請(qǐng)格外:在這樣的上equals和hashCode方法構(gòu)造方法,用于創(chuàng)建空;一個(gè)是帶有單個(gè)Map類型參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)與其參數(shù)具有相同鍵-值關(guān)系的新。實(shí)際上,后一個(gè)構(gòu)造方法允許用戶任意,生成所需類的一個(gè)等價(jià)。盡管無法強(qiáng)制執(zhí)行此建議(因?yàn)榻涌诓荒馨瑯?gòu)造方法),但是JDK中所有通用的實(shí)現(xiàn)都遵從它此接口中包含的“破壞”方法可修改其操作的,如果此不支持該操作,UnsupportedOperationException。如果是這樣,那么在調(diào)用對(duì)(但不要求UnsupportedOperationException。例如,如果某個(gè)不可修改的(其關(guān)系是“”的)為空,則對(duì)該調(diào)用putAll(Map)方法時(shí),可以(但不要求)拋出異常。某些實(shí)現(xiàn)對(duì)可能包含的鍵和值有所限制例如某些實(shí)現(xiàn)null鍵和值,另一些則對(duì)其鍵的類型有限制嘗試不合格的鍵或值將拋出一個(gè)檢查的異常,通常是NullPointerException或ClassCastException。試圖查詢是否false;某些實(shí)現(xiàn)將表現(xiàn)出前一種操作的完成不會(huì)導(dǎo)致不合格的元素入中時(shí),將可能拋出一個(gè)異常,也可此接口是JavaCollectionsFrameworkCollectionsFrameworkequalscontainsKey(Objectkey)方法的規(guī)范:“當(dāng)且僅當(dāng)此包含針對(duì)滿足(key==null?k==null:key.equals(k))的鍵k的關(guān)系時(shí),返回true”。不應(yīng)將此規(guī)范解釋為:調(diào)用具有非空參數(shù)key的Map.containsKey將導(dǎo)致對(duì)kkey.equals(k)equals,例如,可首先比較兩個(gè)鍵的哈希碼(Object.hashCode()的兩個(gè)對(duì)象不會(huì)相等)。一般來說,只要實(shí)現(xiàn)者認(rèn)為合適,各種CollectionsFramework接口的實(shí)現(xiàn)可隨意利用底層Object方法的指定行為。6、publicinterfaceSortedMap<K,V>extendsMap<K,V>進(jìn)一步提供關(guān)于鍵的總體排序的Map。該是根據(jù)其鍵的自然順序進(jìn)行排序的,或者根據(jù)通常在創(chuàng)建有序時(shí)提供的Comparator進(jìn)行排序。對(duì)有序collection(entrySetkeySetvalues進(jìn)行迭代時(shí),SortedSet的對(duì)應(yīng))。有序的所有鍵都必須實(shí)現(xiàn)Comparable接口(或者被指定的比較器接受另外所有這些鍵都必須是可互相比較的對(duì)有序中的任意兩個(gè)鍵k1和k2執(zhí)行 ClassCastException試圖此限制將導(dǎo)致規(guī)則的方法或者構(gòu)造方法調(diào)用拋出ClassCastException。注意,如果有序要正確實(shí)現(xiàn)Map接口,則有序所維持的順序(無論是否提供了明確的比較器)都必須equals致。(有關(guān)equals致的精ComparableComparator)Map是按照equals操作定義的,但有序使用它的compareTo(或compare)方是相等的。即使順序與equals不一致,樹的行為仍然是定義良好的,只不過沒有遵守Map接口的常規(guī)協(xié)定。構(gòu)造方法,它創(chuàng)建一個(gè)空的有序,按照鍵的自然順序進(jìn)行排序。2)帶有一個(gè)Comparator類型參數(shù)的構(gòu)造方法,它創(chuàng)建一個(gè)空的有序,根據(jù)指定的比較器進(jìn)行排序。3)Map射,其鍵-值關(guān)系與參數(shù)相同,按照鍵的自然順序進(jìn)行排序。4)帶有一個(gè)SortedMap類型參數(shù)的構(gòu)造方法,它創(chuàng)建一個(gè)新的有序,其鍵-值關(guān)系和排序方法與輸入的有序相同。無法保證強(qiáng)制實(shí)施此建議,因?yàn)榻涌诓荒馨⒁恍┓椒ǚ祷鼐哂惺芟捩I范圍的子這些范圍區(qū)間是半開的也就是說它們包括點(diǎn)但不包端(如果適用如果需要一個(gè)閉區(qū)(同時(shí)包括兩個(gè)端點(diǎn)),且鍵類型允許計(jì)算給定鍵值的后繼值,則只需要請(qǐng)求從lowEndpoint到successor(highEndpoint)m是一個(gè)用字符串作為鍵的。下面的語句將得到一個(gè)包含m中鍵在low和high(包括)之間的所有鍵-值關(guān)系的視圖:SortedMap<String,V>sub=m.subMap(low,可使用類似的技術(shù)生成一個(gè)開區(qū)間(兩個(gè)端點(diǎn)都不包括)。下面的語句將得到一個(gè)包含m中鍵在low和high(不包括)之間的所有鍵-值關(guān)系的視圖SortedMap<String,V>sub=m.subMap(low+"\0",此接口是JavaCollectionsFramework1publicclassTreeSet<E> implementsNavigableSet<E>,Cloneable,TreeMapNavigableSetsetComparator此實(shí)現(xiàn)為基本操作(add、removecontains)log(n)注意,如果要正確實(shí)現(xiàn)Set接口,則set的順序(無論是否提供了顯式比較器)必須與equals一致。(關(guān)于與equals一致的精確定義,請(qǐng)參閱ComparableComparator。)SetequalsTreeSetcompareTo(compare)方法對(duì)所有元素進(jìn)行比較,setsetequalsSet個(gè)線程修改了該set,那么它必須外部同步。這一般是通過對(duì)自然封裝該setCollections.synchronizedSortedSet方法來“包裝”該set此操作最好在創(chuàng)建時(shí)進(jìn)行,以防止對(duì)set的意外非同步 SortedSets=Collections.synchronizedSortedSet(newiterator快速失敗的:在創(chuàng)建迭代器之后,如果setremove錯(cuò)誤的,正確做法是:迭代器的快速失敗行為應(yīng)該僅用于檢測bug。2publicclassHashMap<K,V> implementsMap<K,V>,Cloneable,基于哈希表的Map接口的實(shí)現(xiàn)。此實(shí)現(xiàn)提供所有可選的操作,并允許使用null值和null鍵。(除了非同步和允許使用null之外,HashMap類與(getput)提供穩(wěn)定的性能。迭代collection視圖所需的時(shí)間與HashMap實(shí)例的“容量”(桶的數(shù)量)及其大?。ㄦI-值關(guān)系數(shù))成比例。所以,如果迭代性能中桶的數(shù)量,初始容量只是哈希表在創(chuàng)建時(shí)的容量。加載因子是哈希表在其容與當(dāng)前容量的乘積時(shí),則要對(duì)該哈希表進(jìn)行rehash操作(即重建數(shù)據(jù)結(jié)(.75)雖然減少了空間開銷,但同時(shí)也增加了查詢成本(HashMapgetput)。在設(shè)置初始容量時(shí)應(yīng)該考慮到果初始容量大于最大條目數(shù)除以加載因子,則不會(huì)發(fā)生rehash操作。如果很多關(guān)系要在HashMap實(shí)例中則相對(duì)于按需執(zhí)行自動(dòng)的rehash操作以增大表的容量來說使用足夠大的初始容量創(chuàng)建它將使得關(guān)系能更有效地。個(gè)線程從結(jié)構(gòu)上修改了該,則它必須保持外部同步。(結(jié)構(gòu)上的修改是指添加或刪除一個(gè)或多個(gè)關(guān)系的任何操作僅改變與實(shí)例已經(jīng)包含的鍵關(guān)聯(lián)的Collections.synchronizedMap步,如下所示:Mapm=Collections.synchronizedMap(new由所有此類的“collection快速失敗代器創(chuàng)建之后,如果從結(jié)構(gòu)上對(duì)進(jìn)行修改,除非通過迭代器本身的remove3publicclassTreeMap<K,V> implementsNavigableMap<K,V>,Cloneable,基于樹(Red-Blacktree)的NavigableMap實(shí)現(xiàn)。該根據(jù)其鍵的自然containsKey、get、putremovelog(n)開銷。這些算法是Cormen、Leiserson和Rivest的IntroductiontoAlgorithms中的算法的改編。注意,如果要正確實(shí)現(xiàn)Map接口,則有序所保持的順序(無論是否明確提供了比較器)都必須與equals一致。(關(guān)于與equals一致的精確定義,請(qǐng)參閱Comparable或Comparator)。這是因?yàn)镸ap接口是按照equals操作定義

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論