资源描述
第7章 Java标准类库 主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.1 简单类型包装器类NumberDouble,FloatByte,Short,Int,Long数字和字符串的转换CharacterBoolean7.1.1 Number 类抽象类Number定义了一个包装数字类型:字节型(Byte),短整型(Short),整型(Integer),长整型(Long),浮点型(Float)和双精度型(Double)的超类。定义了从包装器返回基本类型的方法doubledoubleValue(),floatfloatValue()bytebyteValue(),intintValue(),longlongValue(),shortshortValue()7.1.2 Double和Float双精度(Double)和浮点(Float)分别是对类型double和类型float的浮点值的包装器。构造方法Float(doublevalue),Float(floatvalue),Float(Strings)Double(doublevalue)Double(Strings)Float和Double中定义的常量 MAX_VALUE最大正值MIN_VALUE最小正值NaN非数字POSITIVE_INFINITY正无穷NEGATIVE_INFINITY负无穷Float和Double中定义的主要方法intcompareTo(),比较两个对象staticfloatparseFloat(Strings)把字符串转换成floatstaticFloatvalueOf(Strings)把字符串转换成FloatstaticfloatparseDouble(Strings)把字符串转换成doublestaticDoublevalueOf(Strings)把字符串转换成DoubleDouble,Float 例子/提取简单类型值 f=F.floatValue();d=D.doubleValue();d=D.doubleValue();System.out.println(f);System.out.println(d);/比较System.out.println(D.equals(F);floatf=3.1415f;doubled=3.14159267;FloatF=newFloat(f);Double D=new Double(d);Double D=new Double(d);/转化为字符串System.out.println(F.toString();System.out.println(D.toString();7.1.3 Byte,Short,Integer,Long Byte,Short,Integer,和Long类分别是字节型(byte),短整型(short),整型(int)和长整型(long)整数类型的包装器 构造函数Byte(bytevalue),Byte(Stringstr),Short(shortvalue),Short(Stringstr),Integer(intvalue),Integer(Stringstr),Long(longvalue),Long(Stringstr)定义的主要方法parseByte,parseInt,parseShort,parseLong,把字符串转化成数字类型valueOf(),把字符串转化成数字类型包装器把数字转化成字符串staticStringtoBinaryString(intvalue)staticStringtoHexString(intvalue)staticStringtoOctalString(intvalue)staticStringtoString(intvalue)staticStringtoString(intvalue,intradix)7.1.4 数字和字符串的转换字符串向数字的转换parseByte(),parseShort(),parseInt()和parseLong()数字向字符串的转换staticStringtoBinaryString(intvalue)staticStringtoHexString(intvalue)staticStringtoOctalString(intvalue)staticStringtoString(intvalue)staticStringtoString(intvalue,intradix)数字字符串转换示例1Strings1=12;Strings2=34;Strings=null;inti1=0,i2=0,sum=0;/把字符串转换成整数 i1=Integer.parseInt(s1);i2=newInteger(s2).intValue();sum=i1+i2;/把整数转换成字符串 s=Integer.toString(sum);s=Integer.toString(sum);System.out.println(s);数字字符串转换示例2inti=-34567;Strings=null;/转换成二进制字符串 System.out.println(2进制字串:+Integer.toBinaryString(i);Integer.toBinaryString(i);/转换成8进制字符串System.out.println(8进制字符串:+Integer.toOctalString(i);Integer.toOctalString(i);/转换成16进制字符串 System.out.println(16进制字符串:+Integer.toHexString(i);Integer.toHexString(i);/转换成带符号表示的8进制字符串 s=Integer.toString(i,8);Integer.toString(i,8);System.out.println(带符号8进制字符串:+s);/从8进制字符串转化成Integer对象IntegerI=Integer.valueOf(s,8);System.out.println(Integer对象中的值:+I.intValue();7.1.5 CharacterCharacter是围绕字符型(char)的一个简单的包装器。Character的构造函数如下:Character(charch)Character类定义了很多常数和静态方法。isDigit(charch),isLetter(charch)isLowerCase(charch),toUpperCase(charch)7.1.6 BooleanBooleanBoolean是一个围绕布尔(boolean)值的非常细小的包装器,主要用在通过引用传递布尔(boolean)变量的场合。构造函数Boolean(booleanboolValue)Boolean(StringboolString)Strings=true;booleanb=true;if(b=newBoolean(s).booleanValue()newBoolean(s).booleanValue()System.out.println(两个布尔变量相等);System.out.println(Boolean.valueOf(s).hashCode();java.lnag.Object中对hashCode的约定:在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。如果两个对象根据equals(Objecto)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。如果两个对象根据equals(Objecto)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.2 SystemSystem类保存静态方法和变量的集合。标准的输入,输出和Java运行时错误输出存储在变量in,out和err中。定义的主要方法见下表 System的主要方法1static void arraycopy(Object source,int Start,Object target,int Start,int size)复制数组。static long currentTimeMillis()返回自1970年1月1日午夜至今的时间,时间单位为毫秒。static void exit(int exitCode)返回exitCode值给父进程static void gc()建议JVM进行垃圾回收static Properties getProperties()返回与Java运行系统有关的属性类static String getProperty(String key)返回与key有关的属性。System的主要方法2static String getProperty(String key,String default)返回一个与key有关的属性。如果期望的属性没有被发现,则返回defaultstatic SecurityManager getSecurityManager()返回当前的安全管理程序,如果没有安装安全管理程序,则返回一个空对象(null object)static void load(String libraryFileName)载入其文件由libraryFileName指定的动态库,必须指定其完全路径static void loadLibrary(String libraryName)载入其库名为libraryName的动态库static String mapLibraryName(String lib)对应名为lib的库,返回一个指定平台的名字static void runFinalization()启动调用不用的但还不是回收站中的对象的finalize()方法。System的主要方法3static void setProperties(Properties sysProperties)设置由sysProperties指定的当前系统属性Static String setProperty(String key,String value)将value值赋给名为key的属性static void setSecurityManager(SecurityManager s)设置由s指定的安全管理程序记录程序执行的时间publicclassElapsedpublicstaticvoidmain(Stringargs)longstart,end,sum=0;System.out.println(aloopfrom0to1,000,000,000);start=System.currentTimeMillis();System.currentTimeMillis();for(inti=0;i1000000000;i+)sum=sum+i*i;end=System.currentTimeMillis();System.currentTimeMillis();System.out.println(Elapsedtime:+(end-start);访问JVM的环境属性1java.versionJRE的版本java.vendorJRE的厂商java.vendor.urlJRE厂商的URLjava.homeJava的安装目录java.vm.specification.versionJVM规范的版本java.vm.specification.vendorJVM规范的厂商java.vm.specification.nameJVM规范的名称java.vm.versionJVM的实现版本java.vm.vendorJVM的实现厂商java.vm.nameJVM的实现名称访问JVM的环境属性2publicclassPropsDemopublicstaticvoidmain(Stringargs)System.out.println(System.getPropertygetProperty(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.setProperty(java.class.path,d:javalib);System.out.println(System.getProperty(java.class.path);主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.3 RuntimeRuntime类封装了运行时环境。用户一般不实例化一个Runtime对象。但是可以通过调用静态方法Runtime.getRuntime()而获得对当前Runtime对象的引用。一旦获得了对当前对象的引用,就可以调用几个控制Java虚拟机的状态和行为的方法。Runtime 常用的方法Process exec(String progName)throws IOException将由progName指定的程序作为独立的进程来执行。返回描述新进程的类型Process的对象void exit(int exitCode)暂停执行并且向父进程返回exitCode的值long freeMemory()返回Java运行系统可以利用的空闲内存的大概字节数void gc()初始化垃圾回收站static Runtime getRuntime()返回当前的Runtime对象void halt(int code)立即终止Java虚拟机,void loadLibrary(String libraryName)载入库名为libraryName的动态库long totalMemory()返回程序可以利用的内存的总字节数使用Runtime执行其他程序publicclassExecDemopublicstaticvoidmain(Stringargs)Runtimer=Runtime.getRuntime();Processp=null;tryp=r.execr.exec(notepad);/程序暂停1秒钟Thread.sleep(1000Thread.sleep(1000);/关闭外部程序p.destroyp.destroy();catch(Exceptione)System.out.println(Errorexecutingnotepad.);主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.4 Math定义了一些静态的数学函数方法描述static double exp(double a)返回自然常数e的a次幂的值static double log(double a)返回a的自然对数值static double pow(double y,double x)返回以y为底数,以x为指数的幂值;例如pow(3.0,3.0)返回27.0static double sqrt(double a)返回a的平方根主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.5 日期时间实用工具类Date封装当前的日期和时间,也可以封装一个指定的日期 Calendar,GregorianCalendar一个日历可以获取时间分量日期计算7.5.1 Date构造函数Date(),从当前时间构造对象Date(longmillisec),接收一个参数,该参数等于从1970年年1月月1日午夜日午夜起至今的毫秒数的大小 Date的主要方法方法描述boolean after(Date date)如果调用对象所包含的日期迟于由date指定的日期,则返回true;否则返回falseboolean before(Date date)如果调用对象所包含的日期早于由date指定的日期,则返回true;否则返回falseObject clone()复制调用对象int compareTo(Date date)将调用对象的值与date的值进行比较。long getTime()返回自1970年1月1日起至今的毫秒数值void setTime(long time)按time的指定,设置时间和日期,表示自1970年1月1日午夜至今的以毫秒为单位的时间值String toString()将调用Date对象转换成字符串并且返回结果Date的例子Dated1=newDate();Dated2=newDate(1140203030304L);System.out.println(d1);System.out.println(d2);if(d2.afterafter(d1)System.out.println(d2晚于d1);System.out.println(pareTo(d1);/改变的d2的值为d1 d2.setTime(d1.getTime();d2.setTime(d1.getTime();System.out.println(d2);7.5.2 Calendar 抽象Calendar类提供了一组方法,这些方法允许将以毫秒毫秒为单位的时间转换为一组有用的分量。一些可以提供信息的类型是:年,月,日,小时,分和秒。定义的一些常量,表示时间分量 AMFRIDAYPMAM_PMHOURSATURDAYAPRILHOUR_OF_DAYSECONDAUGUSTJANUARYSEPTEMBERDATEJULYSUNDAYDAY_OF_MONTHJUNETHURSDAYDAY_OF_WEEKMARCHTUESDAYDAY_OF_YEARMILLISECONDWEDNESDAYDECEMBERMINUTEWEEK_OF_MONTHCalendar的主要方法方法描述abstract void add(intfield,intamount)将amount加到由field指定的时间或日期分量。例如Calendar.HOURfinal void clear()对调用对象的所有时间分量置0final int get(int field)返回调用对象的一个分量的值。该分量由field指定。Calendar.YEAR,static Calendar getInstance()对默认的地区和时区,返回一个Calendar对象final Date getTime()返回一个与调用对象的时间相等的Date对象final void set(int field,int val)在调用对象中,将由field指定的日期和时间分量赋给由val指定的值。final void set(int year,int month,int day,int hours,int min,int sec)设置调用对象的各种日期和时间分量final void setTime(Date d)设置调用对象的各种日期和时间分量。该信息从Date对象d中获得7.5.3 GregorianCalendar是Calendar的子类GregorianCalendar是Calendar的一个实现大家所熟悉的标准日历(现在通用的阳历)的具体工具 GregorianCalendar定义了两个域:AD和BC。它们代表由公历定义的两个纪元。GregorianCalendar的构造函数GregorianCalendar(intyear,intmonth,intdate)GregorianCalendar(intyear,intmonth,intdate,inthours,intminutes)GregorianCalendar(intyear,intmonth,intdate,inthours,intminutes,intseconds)三种形式中,都设置了日,月和年。这里,year指定了从1900年起的年数。month指定了月,以0表示一月。月中的日由date指定,从1开始。第一种形式以午夜设置时间。第二种形式以小时和分钟设置时间,第三种形式增加了秒。日历的使用Calendarc=Calendar.getInstance();c.setFirstDayOfWeek(Calendar.MONDAY);/设置日期和时间.c.set(2006,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);详见程序主要内容7.1简单类型包装器类 7.2System7.3Runtime7.4Math7.5日期时间实用工具类 7.6集合框架7.6集合框架集合接口 实现List接口的类 实现Set接口的类 通过迭代接口访问类集 Generics(泛化)映射接口(Map)实现Map接口的类 比较器(Comparator)类集算法 Arrays集合框架概述Java的集合框架使你的程序处理对象数组的方法标准化。统一的操作方法和接口一些通用的算法比较高的性能,可扩展7.6.1集合接口 接口描述CollectionCollectionCollectionCollection能使你操作对象数组,它位于集合框架层次结构的顶层ListListListList扩展Collection,表示有序的,可包括重复元素的列表 SetSetSetSet扩展Collection,表示无序的,无重复元素的集合(数学上的含义)。SortedSetSortedSetSortedSetSortedSet扩展Set,对Set中元素进行排序 Collection接口Collection接口是构造集合框架的基础。它声明所有集合类都将拥有的核心方法。包含下面几种类型的方法增加元素,清除元素,判断元素的存在返回迭代接口,把集合转换成数组集合的大小Collection的主要方法1boolean add(Object obj)将obj加入到调用集合类中。如果obj被加入到集合类中了,则返回true;如果未能加入集合,则返回falseboolean addAll(Collection c)将c中的所有元素都加入到调用集合类中,如果操作成功,则返回true;否则返回falsevoid clear()从调用集合类中删除所有元素boolean contains(Object obj)如果obj是调用集合类的一个元素,则返回true,否则,返回falseboolean containsAll(Collection c)如果调用集合类包含了c中的所有元素,则返回true;否则,返回falseCollection的主要方法2int hashCode()返回调用集合类的散列值boolean isEmptyisEmpty()如果调用集合类是空的,则返回true;否则返回falseIterator iteratoriterator()返回调用集合类的迭代程序Boolean remove(Objectremove(Object obj)从调用集合类中删除obj的一个实例。如果这个元素被删除了,则返回true;否则返回falseBoolean removeAll(CollremoveAll(Collectionection c)从调用集合类中删除c的所有元素。如果集合类被改变了(也就是说元素被删除了),则返回true;否则返回falseCollection的主要方法3Boolean retainAllretainAll(Collection c)删除调用集合类中除了包含在c中的元素之外的全部元素。如果集合类被改变了(也就是说元素被删除了),则返回true,否则返回falseint sizesize()返回调用集合类中元素的个数Object toArray()返回一个数组,该数组包含了所有存储在调用集合类中的元素。Object toArraytoArray(Object array)返回一个数组,该数组仅仅包含了那些类型与数组元素类型匹配的集合类元素。List接口继承了Collection接口表示了一种有序的集合元素可以通过它们在列表中的位置被插入和访问 一个列表可以包含重复元素 List接口的方法void addadd(int index,Object obj)boolean addAlladdAll(int index,Collection c)Object getget(int index)int indexOfindexOf(Object obj)int lastIndexOflastIndexOf(Object obj)ListIterator listIteratorlistIterator()ListIterator listIteratorlistIterator(int index)Object removeremove(int index)Object setset(int index,Object obj)List subListsubList(int start,int end)Set和SortedSet接口 Set继承了Collection并说明了不允许重复元素的类集的特性 SortedSet接口扩展了Set并说明了按升序排列的集合的特性。SortedSet接口的方法方法描述Comparator comparator()返回调用被排序集合的比较器,如果对该集合使用自然顺序,则返回nullObject first()返回调用被排序集合的第一个元素SortedSet headSet(Object end)返回一个包含那些小于end的元素的SortedSet,那些元素包含在调用被排序集合中。返回被排序集合中的元素也被调用被排序集合所引用Object last()返回调用被排序集合的最后一个元素SortedSet subSet(Object start,Object end)返回一个SortedSet,它包括了从start到end1的元素。返回类集中的元素也被调用对象所引用SortedSet tailSet(Object start)返回一个SortedSet,它包含了那些包含在分类集合中的大于等于start的元素。返回集合中的元素也被调用对象所引用7.6.2 实现List接口的类实现List的类类描述AbstractCollection抽象类,实现大多数Collection接口中的方法AbstractList抽象类,继承AbstractCollection并实现大多数List接口AbstractSequentialList抽象类,为了被类集使用并扩展AbstractList,该类集使用连续而不是随机方式访问其元素LinkedList通过继承AbstractSequentialList来实现链接列表ArrayList通过扩展AbstractList来实现动态数组Vector可增长的动态数组,和ArrayList类似,支持同步特性Stack继承Vector,实现了栈的数据结构ArrayList ArrayList支持可随需要而增长的动态数组。ArrayList有如下的构造函数:ArrayList()ArrayList(Collectionc)ArrayList(intcapacity)ArrayList例子1ArrayListal=newArrayList();System.out.println(List的初始大小:+al.size();/向List中增加元素 al.add(A);al.add(A);al.add(B);al.add(C);al.add(D);al.add(E);al.add(F);al.add(1,A2);ArrayList例子2System.out.println(增加元数后的大小:+al.size();al.size();/显示其内容System.out.println(List中的内容:+al);/删除List中的元素al.remove(D);al.remove(D);al.remove(2);al.remove(2);System.out.println(删除元素后的大小:+al.size();System.out.println(内容:+al);LinkedList 类LinkedList类扩展AbstractSequentialList并实现List接口。它提供了一个链接列表数据结构。它具有如下的两个构造函数LinkedList()LinkedList(Collectionc)使用addFirst()方法可以在列表头增加元素;使用addLast()方法可以在列表的尾部增加元素 ObjectgetFirst(),ObjectgetLast()LinkedList 类的例子LinkedListll=newLinkedList();ll.add(A);ll.add(B);ll.addFirst(A3);ll.addLast(A4);详细见程序7.6.3 实现SetSet接口的类HashSet类 HashSet扩展AbstractSet并且实现Set接口。该类集使用散列表进行存储。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当作与关键字相连的数据的存储下标。存储在HashSet中的元素必须正确覆盖java.lang.Object中定义的hashCode()方法。HashSet的例子HashSeths=newHashSet();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从输出结果可以看出,元素并没有按顺序进行存储,并且也没有重复元素。TreeSet类 TreeSet为使用树结构进行存储的Set接口提供了一个工具对象按升序存储。访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。TreeSet的使用TreeSeths=newTreeSet();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按树存储其元素,它们被按照自然顺序自动安排,也不能有重复元素7.6.4通过迭代接口访问类集 通常希望依次访问类集中的元素。到目前为止,处理这个问题的最简单方法是使用iterator,Iterator是一个或者实现Iterator或者实现ListIterator接口的对象。Iterator可以遍历类集中的元素,从而获得或删除元素。ListIterator扩展Iterator,允许双向遍历列表,并可以修改。Iterator接口中的方法 方法描述boolean hasNext()如果存在更多的元素,则返回true,否则返回falseObject next()返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常void remove()从集合中删除当前元素,如果试图在调用next()方法之前,调用remove()方法,则引发IllegalStateException异常。如果重复调用两次remove()方法也会发生这个异常。ListIterator接口中的方法void add(Object obj)int nextIndex()boolean hasNext()Object previous()boolean hasPrevious()int previousIndex()Object next()void remove()void set(Object obj)Iterator的使用ArrayListal=newArrayList();Iteratoritr=al.iterator();al.iterator();while(itr.hasNext()Objectelement=itr.nextitr.next();();System.out.print(element+);详细见程序7.6.5 Generics(泛化)Generics是JDK5.0新增加的功能,在使用集合时,提供了一种编译时类型安全检查功能,并能减少类型强制转化的麻烦。当你从一个集合中取出一个元素时,例如使用Iterator接口中的next()方法,其返回值的类型是Object,在使用这个元素时,需要把返回值转换为元素本身的类型。这种类型转化是不安全的。未使用泛化的代码ArrayLista=newArrayList();a.add(newInteger(1);a.add(newInteger(2);for(Iteratori=a.iterator();i.hasNext();)inti1=(Integer)i.next().intValue();使用泛化后的代码ArrayLista=newArrayList();a.add(newInteger(1);a.add(newInteger(2);for(Iteratori=a.iterator();i.hasNext();)inti1=i.next().intValue();7.6.6 映射接口(Map)映射(map)是一个存储关键字和值的关联或者说是关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象,每一对关键字/值,叫做一项项。关键字必须是唯一的。但值是可以被重复的。有些映射可以接收null关键字和null值。而有的则不行 Map接口的方法void clear()boolean isEmpty()boolean containsKey(Object k)Set keySet()boolean containsValue(Object v)Object put(Object k,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()SortedMapSortedMap接口 SortedMap接口扩展了Map,它确保了各项按关键字升升序排序序排序。Comparator comparator()Object firstKey()SortedMap headMap(Object end)Object lastKey()SortedMap subMap(Object start,Object end)SortedMap tailMap(Object start)Map.Entry Map.Entry 接口 Map.Entry接口使得可以操作映射的项。boo
展开阅读全文