版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程 計(jì)算機(jī)學(xué)院 教學(xué)課件第1頁,共124頁。第7章 Java標(biāo)準(zhǔn)類庫 第2頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2 System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第3頁,共124頁。7.1 簡單類型包裝器類NumberDouble,F(xiàn)loatByte,Short,Int,Long數(shù)字和字符串的轉(zhuǎn)換CharacterBoolean第4頁,共124頁。7.1.1 Number 類抽象類Number定義了一個(gè)包裝數(shù)字類型:字節(jié)型(Byte),短整型(Short),整型(Integer),長整型(Long),浮點(diǎn)
2、型(Float)和雙精度型(Double)的超類。 定義了從包裝器返回基本類型的方法double doubleValue( ),float floatValue( ) byte byteValue( ), ,int intValue( ),long longValue( ),short shortValue( )第5頁,共124頁。7.1.2 Double和Float雙精度(Double)和浮點(diǎn)(Float)分別是對類型double和類型float的浮點(diǎn)值的包裝器。 構(gòu)造方法Float(double value),Float(float value),Float(String s)Double
3、(double value)Double(String s)第6頁,共124頁。Float和Double中定義的常量 MAX_VALUE最大正值MIN_VALUE最小正值NaN非數(shù)字POSITIVE_INFINITY正無窮NEGATIVE_INFINITY負(fù)無窮第7頁,共124頁。Float和Double中定義的主要方法int compareTo (),比較兩個(gè)對象static float parseFloat(String s)把字符串轉(zhuǎn)換成floatstatic Float valueOf(String s)把字符串轉(zhuǎn)換成Float static float parseDouble(Str
4、ing s)把字符串轉(zhuǎn)換成doublestatic Double valueOf(String s)把字符串轉(zhuǎn)換成Double第8頁,共124頁。Double ,Float 例子/提取簡單類型值 f = F.floatValue(); d = D.doubleValue(); System.out.println(f); System.out.println(d); /比較System.out.println(D.equals(F);float f = 3.1415f;double d = 3.14159267;Float F = new Float(f);Double D = new Dou
5、ble(d); /轉(zhuǎn)化為字符串System.out.println(F.toString();System.out.println(D.toString(); 第9頁,共124頁。7.1.3 Byte, Short, Integer, Long Byte,Short,Integer,和Long類分別是字節(jié)型(byte),短整型(short),整型(int)和長整型(long)整數(shù)類型的包裝器 構(gòu)造函數(shù)Byte(byte value),Byte(String str),Short(short value),Short(String str),Integer(int value),Integer(
6、String str),Long(long value),Long(String str)第10頁,共124頁。定義的主要方法 parseByte ,parseInt,parseShort,parseLong, 把字符串轉(zhuǎn)化成數(shù)字類型valueOf(),把字符串轉(zhuǎn)化成數(shù)字類型包裝器把數(shù)字轉(zhuǎn)化成字符串static String toBinaryString(int value)static String toHexString(int value)static String toOctalString(int value)static String toString(int value)stat
7、ic String toString(int value,int radix)第11頁,共124頁。7.1.4 數(shù)字和字符串的轉(zhuǎn)換字符串向數(shù)字的轉(zhuǎn)換parseByte( ),parseShort( ),parseInt( )和parseLong( ) 數(shù)字向字符串的轉(zhuǎn)換static String toBinaryString(int value)static String toHexString(int value)static String toOctalString(int value)static String toString(int value)static String toStr
8、ing(int value,int radix)第12頁,共124頁。數(shù)字字符串轉(zhuǎn)換示例1 String s1 = 12; String s2 = 34; String s = null; int i1 = 0, i2 = 0, sum = 0; /把字符串轉(zhuǎn)換成整數(shù) i1 = Integer.parseInt(s1); i2 = new Integer(s2).intValue(); sum = i1 + i2; /把整數(shù)轉(zhuǎn)換成字符串 s = Integer.toString(sum); System.out.println(s);第13頁,共124頁。數(shù)字字符串轉(zhuǎn)換示例2 int i =
9、-34567; String s = null; /轉(zhuǎn)換成二進(jìn)制字符串 System.out.println(2進(jìn)制字串: + Integer.toBinaryString(i); /轉(zhuǎn)換成8進(jìn)制字符串System.out.println(8進(jìn)制字符串: + Integer.toOctalString(i); /轉(zhuǎn)換成16進(jìn)制字符串 System.out.println(16進(jìn)制字符串: + Integer.toHexString(i); /轉(zhuǎn)換成帶符號(hào)表示的8進(jìn)制字符串 s = Integer.toString(i, 8);System.out.println(帶符號(hào)8進(jìn)制字符串: + s)
10、;/從8進(jìn)制字符串轉(zhuǎn)化成Integer對象Integer I = Integer.valueOf(s, 8); System.out.println(Integer對象中的值:+I.intValue();第14頁,共124頁。7.1.5 CharacterCharacter是圍繞字符型(char)的一個(gè)簡單的包裝器。Character的構(gòu)造函數(shù)如下:Character(char ch)Character類定義了很多常數(shù)和靜態(tài)方法。 isDigit(char ch) , isLetter(char ch) isLowerCase(char ch) ,toUpperCase(char ch) 第1
11、5頁,共124頁。7.1.6 BooleanBoolean是一個(gè)圍繞布爾(boolean)值的非常細(xì)小的包裝器,主要用在通過引用傳遞布爾(boolean)變量的場合。 構(gòu)造函數(shù)Boolean(boolean boolValue)Boolean(String boolString)String s = true;boolean b = true;if (b = new Boolean(s).booleanValue() System.out.println(兩個(gè)布爾變量相等);System.out.println(Boolean.valueOf(s).hashCode();第16頁,共124頁。
12、java.lnag.Object中對hashCode的約定:在一個(gè)應(yīng)用程序執(zhí)行期間,如果一個(gè)對象的equals方法做比較所用到的信息沒有被修改的話,則對該對象調(diào)用hashCode方法多次,它必須始終如一地返回同一個(gè)整數(shù)。如果兩個(gè)對象根據(jù)equals(Object o)方法是相等的,則調(diào)用這兩個(gè)對象中任一對象的hashCode方法必須產(chǎn)生相同的整數(shù)結(jié)果。如果兩個(gè)對象根據(jù)equals(Object o)方法是不相等的,則調(diào)用這兩個(gè)對象中任一個(gè)對象的hashCode方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。但如果能不同,則可能提高散列表的性能。 第17頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2
13、System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第18頁,共124頁。7.2 SystemSystem類保存靜態(tài)方法和變量的集合。標(biāo)準(zhǔn)的輸入,輸出和Java運(yùn)行時(shí)錯(cuò)誤輸出存儲(chǔ)在變量in,out和err中 。定義的主要方法見下表 第19頁,共124頁。System的主要方法1static void arraycopy(Object source, int Start, Object target, int Start,int size)復(fù)制數(shù)組。static long currentTimeMillis( )返回自1970年1月1日午夜至今的時(shí)間,
14、時(shí)間單位為毫秒。static void exit(int exitCode)返回exitCode值給父進(jìn)程static void gc( )建議JVM進(jìn)行垃圾回收static Properties getProperties( )返回與Java運(yùn)行系統(tǒng)有關(guān)的屬性類static String getProperty(String key)返回與key有關(guān)的屬性。第20頁,共124頁。System的主要方法2static String getProperty(String key,String default)返回一個(gè)與key有關(guān)的屬性。如果期望的屬性沒有被發(fā)現(xiàn),則返回defaultstatic
15、SecurityManager getSecurityManager( )返回當(dāng)前的安全管理程序,如果沒有安裝安全管理程序,則返回一個(gè)空對象(null object)static void load(String libraryFileName)載入其文件由libraryFileName指定的動(dòng)態(tài)庫,必須指定其完全路徑static void loadLibrary(String libraryName)載入其庫名為libraryName的動(dòng)態(tài)庫static String mapLibraryName(String lib)對應(yīng)名為lib的庫,返回一個(gè)指定平臺(tái)的名字static void run
16、Finalization( )啟動(dòng)調(diào)用不用的但還不是回收站中的對象的finalize( )方法。第21頁,共124頁。System的主要方法3static void setProperties(Properties sysProperties)設(shè)置由sysProperties指定的當(dāng)前系統(tǒng)屬性Static String setProperty(String key,String value)將value值賦給名為key的屬性static void setSecurityManager( SecurityManager s)設(shè)置由s指定的安全管理程序第22頁,共124頁。記錄程序執(zhí)行的時(shí)間pub
17、lic class Elapsed public static void main(String args) long start, end, sum = 0; System.out.println( a loop from 0 to 1,000,000,000); start = System.currentTimeMillis(); for (int i = 0; i 1000000000; i+) sum = sum + i * i; end = System.currentTimeMillis(); System.out.println(Elapsed time: + (end - s
18、tart); 第23頁,共124頁。訪問JVM的環(huán)境屬性1java.versionJRE的版本java.vendorJRE的廠商java.vendor.urlJRE廠商的URLjava.homeJava的安裝目錄java.vm.specification.versionJVM規(guī)范的版本java.vm.specification.vendorJVM規(guī)范的廠商JVM規(guī)范的名稱java.vm.versionJVM的實(shí)現(xiàn)版本java.vm.vendorJVM的實(shí)現(xiàn)廠商JVM的實(shí)現(xiàn)名稱第24頁,共124頁。訪問JVM的環(huán)境屬性2public class PropsDemo public static v
19、oid main(String args) System.out.println(System.getProperty(java.version); System.out.println(System.getProperty(java.vendor); System.out.println(System.getProperty(java.vendor.url); System.out.println(System.getProperty(java.home); System.out.println(System.getProperty(user.dir); System.setProperty
20、(java.class.path, d:javalib); System.out.println(System.getProperty(java.class.path); 第25頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2 System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第26頁,共124頁。7.3 RuntimeRuntime類封裝了運(yùn)行時(shí)環(huán)境。用戶一般不實(shí)例化一個(gè)Runtime對象。但是可以通過調(diào)用靜態(tài)方法Runtime.getRuntime( )而獲得對當(dāng)前Runtime對象的引用。一旦獲得了對當(dāng)前對象的引用,就可以調(diào)用幾個(gè)控制
21、Java虛擬機(jī)的狀態(tài)和行為的方法。 第27頁,共124頁。Runtime 常用的方法Process exec(String progName)throws IOException將由progName指定的程序作為獨(dú)立的進(jìn)程來執(zhí)行。返回描述新進(jìn)程的類型Process的對象void exit(int exitCode)暫停執(zhí)行并且向父進(jìn)程返回exitCode的值long freeMemory( )返回Java運(yùn)行系統(tǒng)可以利用的空閑內(nèi)存的大概字節(jié)數(shù)void gc( )初始化垃圾回收站static Runtime getRuntime( )返回當(dāng)前的Runtime對象void halt(int cod
22、e)立即終止Java虛擬機(jī),void loadLibrary(String libraryName)載入庫名為libraryName的動(dòng)態(tài)庫long totalMemory( )返回程序可以利用的內(nèi)存的總字節(jié)數(shù)第28頁,共124頁。使用Runtime執(zhí)行其他程序public class ExecDemo public static void main(String args) Runtime r = Runtime.getRuntime(); Process p = null; try p = r.exec(notepad); /程序暫停1秒鐘 Thread.sleep(1000); /關(guān)閉外
23、部程序 p.destroy(); catch (Exception e) System.out.println(Error executing notepad.); 第29頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2 System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第30頁,共124頁。7.4 Math定義了一些靜態(tài)的數(shù)學(xué)函數(shù)方法描述static double exp(double a)返回自然常數(shù)e的a次冪的值static double log(double a)返回a的自然對數(shù)值static double pow(double y
24、, double x)返回以y為底數(shù),以x為指數(shù)的冪值;例如pow(3.0, 3.0)返回27.0static double sqrt(double a)返回a的平方根第31頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2 System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第32頁,共124頁。7.5 日期時(shí)間實(shí)用工具類Date封裝當(dāng)前的日期和時(shí)間,也可以封裝一個(gè)指定的日期 Calendar,GregorianCalendar 一個(gè)日歷可以獲取時(shí)間分量日期計(jì)算第33頁,共124頁。7.5.1 Date構(gòu)造函數(shù)Date( ),從當(dāng)前時(shí)間構(gòu)造對
25、象Date(long millisec),接收一個(gè)參數(shù),該參數(shù)等于從1970年1月1日午夜起至今的毫秒數(shù)的大小 第34頁,共124頁。Date的主要方法方法描述boolean after(Date date)如果調(diào)用對象所包含的日期遲于由date指定的日期,則返回true;否則返回falseboolean before(Date date)如果調(diào)用對象所包含的日期早于由date指定的日期,則返回true;否則返回falseObject clone( )復(fù)制調(diào)用對象int compareTo(Date date)將調(diào)用對象的值與date的值進(jìn)行比較。long getTime( )返回自1970年
26、1月1日起至今的毫秒數(shù)值void setTime(long time)按time的指定,設(shè)置時(shí)間和日期,表示自1970年1月1日午夜至今的以毫秒為單位的時(shí)間值String toString( )將調(diào)用Date對象轉(zhuǎn)換成字符串并且返回結(jié)果第35頁,共124頁。Date的例子 Date d1 = new Date(); Date d2 = new Date(1140203030304L); System.out.println(d1); System.out.println(d2); if (d2.after(d1) System.out.println(d2晚于d1); System.out.p
27、rintln(pareTo(d1); /改變的d2的值為d1 d2.setTime(d1.getTime(); System.out.println(d2);第36頁,共124頁。7.5.2 Calendar 抽象Calendar類提供了一組方法,這些方法允許將以毫秒為單位的時(shí)間轉(zhuǎn)換為一組有用的分量。一些可以提供信息的類型是:年,月,日,小時(shí),分和秒。定義的一些常量,表示時(shí)間分量 AMFRIDAYPMAM_PMHOURSATURDAYAPRILHOUR_OF_DAYSECONDAUGUSTJANUARYSEPTEMBERDATEJULYSUNDAYDAY_OF_MONTHJUNETHURSDA
28、YDAY_OF_WEEKMARCHTUESDAYDAY_OF_YEARMILLISECONDWEDNESDAYDECEMBERMINUTEWEEK_OF_MONTH第37頁,共124頁。Calendar的主要方法方法描述abstract void add(intfield, intamount)將amount加到由field指定的時(shí)間或日期分量。例如Calendar.HOURfinal void clear( )對調(diào)用對象的所有時(shí)間分量置0final int get(int field)返回調(diào)用對象的一個(gè)分量的值。該分量由field指定。Calendar.YEAR,static Calenda
29、r getInstance( )對默認(rèn)的地區(qū)和時(shí)區(qū),返回一個(gè)Calendar對象final Date getTime( )返回一個(gè)與調(diào)用對象的時(shí)間相等的Date對象final void set(int field, int val)在調(diào)用對象中,將由field指定的日期和時(shí)間分量賦給由val指定的值。final void set(int year, int month,int day, int hours,int min, int sec)設(shè)置調(diào)用對象的各種日期和時(shí)間分量final void setTime(Date d)設(shè)置調(diào)用對象的各種日期和時(shí)間分量。該信息從Date對象d中獲得第38頁,
30、共124頁。7.5.3 GregorianCalendar是Calendar的子類GregorianCalendar是Calendar的一個(gè)實(shí)現(xiàn)大家所熟悉的標(biāo)準(zhǔn)日歷(現(xiàn)在通用的陽歷)的具體工具 GregorianCalendar定義了兩個(gè)域:AD和BC。它們代表由公歷定義的兩個(gè)紀(jì)元。第39頁,共124頁。GregorianCalendar的構(gòu)造函數(shù)GregorianCalendar(int year, int month, int date)GregorianCalendar(int year, int month, int date, int hours,int minutes)Gregor
31、ianCalendar(int year, int month, int date, int hours,int minutes, int seconds)三種形式中,都設(shè)置了日,月和年。這里,year指定了從1900年起的年數(shù)。month指定了月,以0表示一月。月中的日由date指定,從1開始。第一種形式以午夜設(shè)置時(shí)間。第二種形式以小時(shí)和分鐘設(shè)置時(shí)間,第三種形式增加了秒。第40頁,共124頁。日歷的使用Calendar c = Calendar.getInstance(); c.setFirstDayOfWeek(Calendar.MONDAY); /設(shè)置日期和時(shí)間. c.set(2006,
32、 11, 30); c.set(Calendar.HOUR, 10); c.set(Calendar.MINUTE, 29); c.set(Calendar.SECOND, 22); c.add(Calendar.DATE, 10); c.add(Calendar.HOUR_OF_DAY, 10);詳見程序第41頁,共124頁。主要內(nèi)容7.1 簡單類型包裝器類 7.2 System 7.3 Runtime7.4 Math7.5 日期時(shí)間實(shí)用工具類 7.6 集合框架第42頁,共124頁。7.6集合框架集合接口 實(shí)現(xiàn)List接口的類 實(shí)現(xiàn)Set接口的類 通過迭代接口訪問類集 Generics(泛化
33、) 映射接口(Map) 實(shí)現(xiàn)Map接口的類 比較器(Comparator) 類集算法 Arrays 第43頁,共124頁。集合框架概述Java的集合框架使你的程序處理對象數(shù)組的方法標(biāo)準(zhǔn)化。 統(tǒng)一的操作方法和接口一些通用的算法比較高的性能,可擴(kuò)展第44頁,共124頁。7.6.1集合接口 接口描述Collection能使你操作對象數(shù)組,它位于集合框架層次結(jié)構(gòu)的頂層List擴(kuò)展Collection,表示有序的,可包括重復(fù)元素的列表 Set擴(kuò)展Collection,表示無序的,無重復(fù)元素的集合(數(shù)學(xué)上的含義)。 SortedSet擴(kuò)展Set,對Set中元素進(jìn)行排序 第45頁,共124頁。Collect
34、ion接口Collection接口是構(gòu)造集合框架的基礎(chǔ)。它聲明所有集合類都將擁有的核心方法。 包含下面幾種類型的方法增加元素,清除元素,判斷元素的存在返回迭代接口,把集合轉(zhuǎn)換成數(shù)組集合的大小第46頁,共124頁。Collection的主要方法1boolean add(Object obj)將obj加入到調(diào)用集合類中。如果obj被加入到集合類中了,則返回true;如果未能加入集合,則返回falseboolean addAll(Collection c)將c中的所有元素都加入到調(diào)用集合類中,如果操作成功,則返回true;否則返回falsevoid clear( )從調(diào)用集合類中刪除所有元素bool
35、ean contains(Object obj)如果obj是調(diào)用集合類的一個(gè)元素,則返回true,否則,返回falseboolean containsAll(Collection c)如果調(diào)用集合類包含了c中的所有元素,則返回true;否則,返回false第47頁,共124頁。Collection的主要方法2int hashCode( )返回調(diào)用集合類的散列值boolean isEmpty( )如果調(diào)用集合類是空的,則返回true;否則返回falseIterator iterator( )返回調(diào)用集合類的迭代程序Boolean remove(Object obj)從調(diào)用集合類中刪除obj的一個(gè)
36、實(shí)例。如果這個(gè)元素被刪除了,則返回true;否則返回falseBoolean removeAll(Collection c)從調(diào)用集合類中刪除c的所有元素。如果集合類被改變了(也就是說元素被刪除了),則返回true;否則返回false第48頁,共124頁。Collection的主要方法3Boolean retainAll(Collection c)刪除調(diào)用集合類中除了包含在c中的元素之外的全部元素。如果集合類被改變了(也就是說元素被刪除了),則返回true,否則返回falseint size( )返回調(diào)用集合類中元素的個(gè)數(shù)Object toArray( )返回一個(gè)數(shù)組,該數(shù)組包含了所有存儲(chǔ)在調(diào)
37、用集合類中的元素。Object toArray(Object array )返回一個(gè)數(shù)組,該數(shù)組僅僅包含了那些類型與數(shù)組元素類型匹配的集合類元素。第49頁,共124頁。List接口繼承了Collection接口表示了一種有序的集合元素可以通過它們在列表中的位置被插入和訪問 一個(gè)列表可以包含重復(fù)元素 第50頁,共124頁。List接口的方法void add(int index, Object obj)boolean addAll(int index, Collection c)Object get(int index)int indexOf(Object obj)int lastIndexOf(
38、Object obj)ListIterator listIterator( )ListIterator listIterator(int index)Object remove(int index)Object set(int index, Object obj)List subList(int start, int end)第51頁,共124頁。Set和SortedSet接口 Set繼承了Collection并說明了不允許重復(fù)元素的類集的特性 SortedSet接口擴(kuò)展了Set并說明了按升序排列的集合的特性。第52頁,共124頁。SortedSet接口的方法方法描述Comparator co
39、mparator( )返回調(diào)用被排序集合的比較器,如果對該集合使用自然順序,則返回nullObject first( )返回調(diào)用被排序集合的第一個(gè)元素SortedSet headSet(Object end)返回一個(gè)包含那些小于end的元素的SortedSet,那些元素包含在調(diào)用被排序集合中。返回被排序集合中的元素也被調(diào)用被排序集合所引用Object last( )返回調(diào)用被排序集合的最后一個(gè)元素SortedSet subSet(Object start, Object end)返回一個(gè)SortedSet,它包括了從start到end1的元素。返回類集中的元素也被調(diào)用對象所引用SortedSe
40、t tailSet(Object start)返回一個(gè)SortedSet,它包含了那些包含在分類集合中的大于等于start的元素。返回集合中的元素也被調(diào)用對象所引用第53頁,共124頁。7.6.2 實(shí)現(xiàn)List接口的類第54頁,共124頁。實(shí)現(xiàn)List的類類描述AbstractCollection抽象類,實(shí)現(xiàn)大多數(shù)Collection接口中的方法AbstractList抽象類,繼承AbstractCollection并實(shí)現(xiàn)大多數(shù)List接口AbstractSequentialList抽象類,為了被類集使用并擴(kuò)展AbstractList,該類集使用連續(xù)而不是隨機(jī)方式訪問其元素LinkedList
41、通過繼承AbstractSequentialList來實(shí)現(xiàn)鏈接列表ArrayList通過擴(kuò)展AbstractList來實(shí)現(xiàn)動(dòng)態(tài)數(shù)組Vector可增長的動(dòng)態(tài)數(shù)組,和ArrayList類似,支持同步特性Stack繼承Vector,實(shí)現(xiàn)了棧的數(shù)據(jù)結(jié)構(gòu)第55頁,共124頁。ArrayList ArrayList支持可隨需要而增長的動(dòng)態(tài)數(shù)組。ArrayList有如下的構(gòu)造函數(shù):ArrayList( )ArrayList(Collection c)ArrayList(int capacity) 第56頁,共124頁。ArrayList例子1 ArrayList al = new ArrayList();
42、System.out.println(List的初始大小: + al.size(); / 向List中增加元素 al.add(A); al.add(B); al.add(C); al.add(D); al.add(E); al.add(F); al.add(1, A2);第57頁,共124頁。ArrayList例子2System.out.println(增加元數(shù)后的大小: + al.size();/顯示其內(nèi)容System.out.println(List中的內(nèi)容: + al);/刪除List中的元素al.remove(D);al.remove(2);System.out.println(刪除元
43、素后的大小: + al.size();System.out.println(內(nèi)容: + al);第58頁,共124頁。LinkedList 類LinkedList類擴(kuò)展AbstractSequentialList并實(shí)現(xiàn)List接口。它提供了一個(gè)鏈接列表數(shù)據(jù)結(jié)構(gòu)。它具有如下的兩個(gè)構(gòu)造函數(shù)LinkedList( )LinkedList(Collection c)使用addFirst( )方法可以在列表頭增加元素;使用addLast( )方法可以在列表的尾部增加元素 Object getFirst( ),Object getLast( )第59頁,共124頁。LinkedList 類的例子Linke
44、dList ll = new LinkedList(); ll.add(A); ll.add(B); ll.addFirst(A3); ll.addLast(A4);詳細(xì)見程序第60頁,共124頁。7.6.3 實(shí)現(xiàn)Set接口的類第61頁,共124頁。HashSet類 HashSet擴(kuò)展AbstractSet并且實(shí)現(xiàn)Set接口。該類集使用散列表進(jìn)行存儲(chǔ)。在散列(hashing)中,一個(gè)關(guān)鍵字的信息內(nèi)容被用來確定唯一的一個(gè)值,稱為散列碼(hashcode)。而散列碼被用來當(dāng)作與關(guān)鍵字相連的數(shù)據(jù)的存儲(chǔ)下標(biāo)。存儲(chǔ)在HashSet中的元素必須正確覆蓋java.lang.Object中定義的hashCod
45、e()方法。 第62頁,共124頁。HashSet的例子HashSet hs = new HashSet();hs.add(A);hs.add(B);hs.add(C);hs.add(D);hs.add(E);hs.add(F);hs.add(A);System.out.println(hs);D, A, F, C, B, E從輸出結(jié)果可以看出,元素并沒有按順序進(jìn)行存儲(chǔ),并且也沒有重復(fù)元素。第63頁,共124頁。TreeSet類 TreeSet為使用樹結(jié)構(gòu)進(jìn)行存儲(chǔ)的Set接口提供了一個(gè)工具對象按升序存儲(chǔ)。訪問和檢索是很快的。在存儲(chǔ)了大量的需要進(jìn)行快速檢索的排序信息的情況下,TreeSet是一個(gè)
46、很好的選擇。第64頁,共124頁。TreeSet的使用TreeSet hs = new TreeSet();hs.add(D);hs.add(E);hs.add(F);hs.add(A);hs.add(B);hs.add(C);hs.add(A);System.out.println(hs);該程序的輸出如下:A, B, C, D, E, FTreeSet按樹存儲(chǔ)其元素,它們被按照自然順序自動(dòng)安排,也不能有重復(fù)元素 第65頁,共124頁。7.6.4通過迭代接口訪問類集 通常希望依次訪問類集中的元素。到目前為止,處理這個(gè)問題的最簡單方法是使用iterator,Iterator是一個(gè)或者實(shí)現(xiàn)Ite
47、rator或者實(shí)現(xiàn)ListIterator接口的對象。Iterator可以遍歷類集中的元素,從而獲得或刪除元素。ListIterator擴(kuò)展Iterator,允許雙向遍歷列表,并可以修改。 第66頁,共124頁。Iterator接口中的方法 方法描述boolean hasNext( )如果存在更多的元素,則返回true,否則返回falseObject next( )返回下一個(gè)元素。如果沒有下一個(gè)元素,則引發(fā)NoSuchElementException異常void remove( )從集合中刪除當(dāng)前元素,如果試圖在調(diào)用next( )方法之前,調(diào)用remove( )方法,則引發(fā)IllegalSta
48、teException異常。如果重復(fù)調(diào)用兩次remove()方法也會(huì)發(fā)生這個(gè)異常。第67頁,共124頁。ListIterator接口中的方法void add(Object obj)int nextIndex( )boolean hasNext( )Object previous( )boolean hasPrevious( )int previousIndex( )Object next( )void remove( )void set(Object obj)第68頁,共124頁。Iterator的使用ArrayList al = new ArrayList();Iterator itr =
49、al.iterator();while (itr.hasNext()Object element = itr.next();System.out.print(element + );詳細(xì)見程序第69頁,共124頁。7.6.5 Generics(泛化) Generics是JDK5.0新增加的功能,在使用集合時(shí),提供了一種編譯時(shí)類型安全檢查功能,并能減少類型強(qiáng)制轉(zhuǎn)化的麻煩。當(dāng)你從一個(gè)集合中取出一個(gè)元素時(shí),例如使用Iterator接口中的next()方法,其返回值的類型是Object,在使用這個(gè)元素時(shí),需要把返回值轉(zhuǎn)換為元素本身的類型。這種類型轉(zhuǎn)化是不安全的。 第70頁,共124頁。未使用泛化的代碼
50、ArrayList a=new ArrayList();a.add(new Integer(1);a.add(new Integer(2);for(Iterator i=a.iterator();i.hasNext();)int i1 = (Integer)i.next().intValue();第71頁,共124頁。使用泛化后的代碼ArrayList a=new ArrayList();a.add(new Integer(1);a.add(new Integer(2);for(Iterator i=a.iterator();i.hasNext();)int i1 = i.next().int
51、Value();第72頁,共124頁。7.6.6 映射接口(Map) 映射(map)是一個(gè)存儲(chǔ)關(guān)鍵字和值的關(guān)聯(lián)或者說是關(guān)鍵字/值對的對象。給定一個(gè)關(guān)鍵字,可以得到它的值。關(guān)鍵字和值都是對象,每一對關(guān)鍵字/值,叫做一項(xiàng)。關(guān)鍵字必須是唯一的。但值是可以被重復(fù)的。有些映射可以接收null關(guān)鍵字和null值。而有的則不行 第73頁,共124頁。Map接口的方法void clear( )boolean isEmpty( )boolean containsKey(Object k)Set keySet( )boolean containsValue(Object v)Object put(Object k
52、, Object v)Set entrySet( )void putAll(Map m)Boolean equals(Object obj)Object remove(Object k)Object get(Object k)int size( )int hashCode( )Collection values( )第74頁,共124頁。SortedMap接口 SortedMap接口擴(kuò)展了Map,它確保了各項(xiàng)按關(guān)鍵字升序排序。 Comparator comparator( )Object firstKey( )SortedMap headMap(Object end)Object lastKe
53、y( )SortedMap subMap(Object start, Object end)SortedMap tailMap(Object start)第75頁,共124頁。Map.Entry 接口 Map.Entry接口使得可以操作映射的項(xiàng)。 boolean equals(Object obj)Object getKey( )Object getValue( )int hashCode( )Object setValue(Object v)第76頁,共124頁。實(shí)現(xiàn)Map接口的類 第77頁,共124頁。HashMap 類 HashMap類使用散列表實(shí)現(xiàn)Map接口 HashMap hm =
54、new HashMap/ 把元素加入映射hm.put(John, new Integer(96);hm.put(Tom, new Integer(97);hm.put(Jane, new Integer(98);詳細(xì)見程序第78頁,共124頁。TreeMap 類 TreeMap類通過使用樹實(shí)現(xiàn)Map接口。允許快速檢索。應(yīng)該注意的是,不像散列映射,樹映射保證它的元素按照關(guān)鍵字升序排序。下面的TreeMap構(gòu)造函數(shù)定義為:TreeMap( )TreeMap(Comparator comp)TreeMap(Map m)TreeMap(SortedMap sm)第79頁,共124頁。TreeMap的使
55、用TreeMap tm = new TreeMap();/ 放入元素tm.put(E, new Double(3444.44);tm.put(A, new Double(3444.34);tm.put(B, new Double(124.22);tm.put(C, new Double(1338.00);Iterator i = set.iterator();while (i.hasNext()String key = i.next();System.out.println(key + : + tm.get(key).doubleValue();詳細(xì)見程序第80頁,共124頁。7.6.8 比較
56、器(Comparator) TreeSet和TreeMap都按順序存儲(chǔ)元素??梢允褂帽容^器精確定義采用何種規(guī)則進(jìn)行排序。 Comparator接口定義了兩個(gè)方法:compare( )和equals( )。compare( )方法比較了兩個(gè)元素,確定它們的順序:int compare(Object obj1, Object obj2)例子見程序第81頁,共124頁。7.6.9 類集算法static int binarySearch(List list, Object value)static void sort(List list)static void fill(List list, Obje
57、ct obj)static void shuffle(List list, Random r)Static Object max(Collection c,Comparator comp)static Map synchronizedMap(Map m)static Object min(Collection c,Comparator comp)static Set synchronizedSet(Set s)static List nCopies(int num, Object obj)static void sort(List list, Comparator comp)static vo
58、id reverse(List list)static SortedSet synchronizedSortedSet(SortedSet ss)static Comparator reverseOrder( )staticvoid swap(Listlist, inti, intj)第82頁,共124頁。類集算法如synchronizedList( )和synchronizedSet( )被用來獲得各種類集的同步(線程安全的)拷貝。 其他方法的使用見例子第83頁,共124頁。7.6.10 Arrays在java.util中有一個(gè)叫做Arrays的類。這個(gè)類提供了各種在進(jìn)行數(shù)組運(yùn)算時(shí)很有用的方
59、法。提供了跨越類集和數(shù)組的橋梁 Arrays類中定義了5種類型的方法:asList():返回一個(gè)被指定數(shù)組支持的List;binarySearch(),在不同類型的數(shù)組中搜索特定值;equals(),比較兩個(gè)數(shù)組是否相等;fill(),用一個(gè)指定的值填充數(shù)組sort(),對不同類型的數(shù)組排序。見程序第84頁,共124頁。第8章 Java異常處理第85頁,共124頁。主要內(nèi)容8.1 什么是異常8.2異常處理機(jī)制8.3異常的處理8.4 創(chuàng)建用戶異常類第86頁,共124頁。8.1 什么是異常異常(Exception)也叫例外。在Java編程語言中,異常就是程序在運(yùn)行過程中由于硬件設(shè)備問題、軟件設(shè)計(jì)錯(cuò)
60、誤、缺陷等導(dǎo)致的程序錯(cuò)誤。在軟件開發(fā)過程中,很多情況都將導(dǎo)致異常的產(chǎn)生,例如: (1) 想打開的文件不存在; (2) 網(wǎng)絡(luò)連接中斷; (3) 操作數(shù)超出預(yù)定范圍; (4) 正在裝載的類文件丟失; (5) 訪問的數(shù)據(jù)庫打不開;可見,在程序中產(chǎn)生異常的現(xiàn)象是非常普遍的。在Java編程語言中,對異常的處理有非常完備的機(jī)制。異常本身作為一個(gè)對象,產(chǎn)生異常就是產(chǎn)生一個(gè)異常對象。這個(gè)對象可能由應(yīng)用程序本身產(chǎn)生,也可能由 Java 虛擬機(jī)產(chǎn)生,這取決于產(chǎn)生異常的類型。該異常對象中包括了異常事件的類型以及發(fā)生異常時(shí)應(yīng)用程序目前的狀態(tài)和調(diào)用過程。請看下面產(chǎn)生異常的例子。第87頁,共124頁。8.1 什么是異?!?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物業(yè)人力資源薪資福利調(diào)整服務(wù)合同3篇
- 2024版離婚后子女共同撫養(yǎng)安排合同一
- 2025年度林業(yè)碳匯項(xiàng)目咨詢與服務(wù)合同范本4篇
- 2024鐵路貨運(yùn)貨物包裝材料回收及處理服務(wù)合同3篇
- 2024水電工程勞務(wù)派遣合同范本3篇
- 2025年度智慧城市建設(shè)合作協(xié)議范本8篇
- 2025年度汽車零部件供應(yīng)鏈合作協(xié)議4篇
- 2025年度旅游汽車租賃及住宿服務(wù)合同4篇
- 三方商業(yè)信息保密合作協(xié)議(2024年版)版B版
- 專業(yè)測繪工程協(xié)議模板2024年版版A版
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風(fēng)水學(xué)的基礎(chǔ)知識(shí)培訓(xùn)
- 吸入療法在呼吸康復(fù)應(yīng)用中的中國專家共識(shí)2022版
- 1-35kV電纜技術(shù)參數(shù)表
- 信息科技課程標(biāo)準(zhǔn)測(2022版)考試題庫及答案
- 施工組織設(shè)計(jì)方案針對性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術(shù)規(guī)范
- 2024年服裝制版師(高級)職業(yè)鑒定考試復(fù)習(xí)題庫(含答案)
- 門診部縮短就診等候時(shí)間PDCA案例-課件
評論
0/150
提交評論