Java实用PPT课件第7章 常用实用类.ppt

Java实用PPT课件第7章 常用实用类.ppt

ID:58883136

大小:803.50 KB

页数:44页

时间:2020-09-30

上传者:U-5649
Java实用PPT课件第7章 常用实用类.ppt_第1页
Java实用PPT课件第7章 常用实用类.ppt_第2页
Java实用PPT课件第7章 常用实用类.ppt_第3页
Java实用PPT课件第7章 常用实用类.ppt_第4页
Java实用PPT课件第7章 常用实用类.ppt_第5页
资源描述:

《Java实用PPT课件第7章 常用实用类.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第7章常用实用类Date类和Calendar类Math类与Biglnteger类数字格式化LinkedList泛型类HashSet泛型类HashMap泛型类TreeSet泛型类TreeMap泛型类Stack泛型类1 7.1Date类1.Date对象◆Date类在java.util包中。使用Date类的无参数构造方法创建的对象可以获取本地当前时间。◆用Date的构造方法Date(longtime)创建的Date对象表示相对1970年1月1日0点(GMT)的时间,如参数time取值60×60×1000秒,表示ThuJan0101:00:00GMT1970。◆System类的静态方法publiclongcurrentTimeMillis()可以获取系统当前时间,这个时间是从1970年1月1日0点(GMT)到目前时刻所走过的毫秒数(这是一个不小的数)。可以根据currentTimeMillis()方法得到的数字,用Date的构造方法Date(longtime)来创建一个本地日期的Date对象。2 2.格式化时间Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年,如SatApr2821:59:38CST2001可以使用DateFormat的子类SimpleDateFormat来实现日期的格式化。SimpleDateFormat有一个常用构造方法:publicSimpleDateFormat(Stringpattern)该构造方法可以用参数pattern指定的格式创建一个对象sdf,sdf调用publicStringformat(Datedate)方法格式化时间参数date指定的时间对象,format方法将根据创建sdf对象时所使用的参数pattern返回一个字符串对象formatTime:StringformatTime=sdf.format(newDate());需要注意的是,当使用SimpleDateFormat(Stringpattern)构造对象sdf时,参数pattern中应当含有“时间元字符”,例如,对于:pattern=yyyy-mm-dd,如果当前机器的时间是2008年8月12日,那么sdf.format(newDate())返回的字符串就是2008-08-12,也就是说sdf.format(newDate())返回的字符串就是将pattern中的时间元字符:yyyy,mm和dd替换相应的时间数据之后的一个字符串。3 常用时间元字符:y,yy:2位数字年份,如98。yyyy:4位数字年份,如2008。M,MM:2位数字月份,如08MMM:汉字月份,如八月。d,dd:2位数字日期,如09、22。a:上午或下午。H,HH:2位数字小时(00-23)。h,,hh:2位数字小时(am/pm,01-12)m,mm:2位数字分。s,ss:2位数字秒。E,EE:星期。例7-1中,用3种格式输出时间。4 7.2Calendar类Calendar类在java.util包中。Calendar类的static方法getInstance()可以初始化一个日历对象,如Calendarcalendar=Calendar.getInstance();然后,calendar对象可以调用方法:◆publicfinalvoidset(intyear,intmonth,intdate)◆publicfinalvoidset(intyear,intmonth,intdate,inthour,intminute)◆publicfinalvoidset(intyear,intmonth,intdate,inthour,intminute,intsecond)将日历翻到任何一个时间,当参数year取负数时表示公元前。◆publicintget(intfield)可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的静态常量指定。例如,calendar.get(Calendar.MONTH);返回一个整数(0表示当前日历是在一月,1表示当前日历是在二月等)。日历对象调用◆publiclonggetTimeInMillis()可以将时间表示为毫秒。例7-2使用Calendar来表示时间,并计算了1931年9月18日和1945年8月15日之间相隔的天数。效果图例7-3输出1931年9月的日历(效果如图7.1所示)。5 例子7-2,例子7-3效果图例子7-2效果图6 7.3Math类与BigInteger类1.Math类java.lang包中的类包含许多用来进行科学计算的类方法,这些方法可以直接通过类名调用。Math类还有两个静态常量:E和PI,它们的值分别是2.7182828284590452354和3.14159265358979323846。7 Math类的常用方法:publicstaticlongabs(doublea)返回a的绝对值。publicstaticdoublemax(doublea,doubleb)返回a、b的最大值。publicstaticdoublemin(doublea,doubleb)返回a、b的最小值。publicstaticdoublerandom()产生一个0到1之间的随机数(不包括0和1)。publicstaticdoublepow(doublea,doubleb)返回a的b次幂。publicstaticdoublesqrt(doublea)返回a的平方根。publicstaticdoublelog(doublea)返回a的对数。publicstaticdoublesin(doublea)返回正弦值。publicstaticdoubleasin(doublea)返回反正弦值8 对数字格式化--NumberFormat类java.text包中的NumberFormat类,该类调用类方法publicstaticfinalNumberFormatgetInstance()实例化一个NumberFormat对象,该对象调用publicfinalStringformat(doublenumber)方法可以格式化数字number。NumberFormat类有如下常用方法:publicvoidsetMaximumFractionDigits(intnewValue)publicvoidsetMinimumFractionDigits(intnewValue)publicvoidsetMaximumIntegerDigits(intnewValue)publicvoidsetMinimumIntegerDigits(intnewValue)例7-4用一定的格式输出10的平方根,通过一个20次的循环,每次获取1~8之间的一个随机数(效果如图7.2所示)。例7-5使用自己编写的MyNumberFormat类中的方法格式化10的平方根(效果如图7.3所示)。9 例子7-4,例子7-5效果图10 2.BigInteger类java.math包中的BigInteger类提供任意精度的整数运算。可以使用构造方法publicBigInteger(Stringval)构造一个十进制的BigInteger对象。该构造方法可以发生NumberFormatException异常。也就是说,字符串参数val中如果含有非数字字母就会发生NumberFormatException异常.11 BigInteger类的常用方法publicBigIntegeradd(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的和。publicBigIntegersubtract(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的差。publicBigIntegermultiply(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的积。publicBigIntegerdivide(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的商。publicBigIntegerremainder(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的余。publicintcompareTo(BigIntegerval)返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。publicBigIntegerabs()返回当前大整数对象的绝对值。publicBigIntegerpow(intexponent)返回当前大整数对象的exponent次幂。publicStringtoString()返回当前大整数对象十进制的字符串表示。publicStringtoString(intp)返回当前大整数对象p进制的字符串表示。例7-6计算了2个大整数的和、差、积和商,并计算出了一个大整数的因子个数。12 例子7-6效果图13 7.4数字格式化所谓数字格式化,就是按着指定格式得到一个字符串。例如,希望3.141592最多保留2位小数,那么得到的格式化字符串应当是"3.14";希望整数1234789按“千”分组,那么得到的格式化字符串应当是"1,234,789";数字59.88887的小数保留3位小数、整数部分至少要显示3位,那么得到的格式化字符串应当是"059.889"。14 1.Formatter类Formatter类提供了一个和C语言printf函数类似的format方法:format(格式化模式,值列表)该方法按着“格式化模式”返回“值列表”的字符串表示。1)格式化模式:用双引号括起的字符序列(字符串),该字符序列中的字符由格式符和普通字符所构成。例如:"输出结果%d,%f,%d"中的%d和%f是格式符号;开始的4个汉字、中间的两个逗号是普通字符。格式符将被替换。例如:Strings=String.format("%.2f",3.141592);那么s就是"3.14"。2)值列表:是用逗号分隔的变量、常量或表达式。要保证format方法“格式化模式”中的格式符的个数与“值列表”中列出的值的个数相同。例如:Strings=format("%d元%0.3f公斤%d台",888,999.777666,123);那么s就是:"888元999.778公斤123台"。3)格式化顺序:format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样。例如,假设int型变量x和double型变量的值分别是888和3.1415926,那么对于Strings=format("从左向右:%d,%.3f,%d",x,y,100);字符串s就是:从左向右:888,3.142,10015 2.格式化整数1)%d,%o,%x和%X可格式化byte、Byte、short、Short、int、Integer、long和Long型数据,如,Strings=String.format("%d,%o,%x,%X",703576,703576,703576,703576);字符串s就是:703576,2536130,abc58,ABC582)修饰符:加号修饰符“+”,逗号修饰符“,”如Strings=String.format("按千分组:%,d。按千分组带正号%+,d",1235678,9876);字符串s就是:按千分组:1,235,678。按千分组带正号+9,8763)数据的宽度:"%md",或"%-md",Strings=String.format("%8d",59);字符串s就是:"59",其长度(s.length())为8,s在59左面添加了6个空格字符。注:如果实际数字的宽度大于格式中指定的宽度,就按数字的实际宽度进行格式化。可以在宽度的前面增加前缀0,表示用数字0来填充宽度左面的富裕部分,如:Strings=String.format("%08d",12);字符串s就是:"00000012",其长度(s.length())为8,即s在12的左面添加了6个数字0。16 3.格式化浮点数1)%f,%e(%E),%g(%G)和%a(%A)可格式化float、Float、double和Double,如:Strings=String.format("%f,%e",13579.98,13579.98);字符串s就是13579.980000,1.357998e+042)修饰:加号修饰符“+”,逗号修饰符“,”如:Strings=String.format("整数部分按千分组:%,f。按千分组带正%+,f",1235678.9876);字符串s就是整数部分按千分组:+1,235,678.9876003)限制小数位数与数据的“宽度”"%.nf"n是保留的小数位数,如%.3f将6.1256格式化为"3.126"(保留3位小数)。"%mf","%-md"规定宽度(在数字的左,右面增加空格)如:Strings=String.format("%11f",59.88);字符串s就是"59.880000",s在数字左面添加了2个空格字符."%m.n"指定宽度的同时也可以限制小数位数,如:Strings=String.format("%11.2f",59.88);字符串s就是:"59.88",即s在59.88左面添加了6个空格字符。例7-7格式化数字,运行效果如图7.4。17 例子7-7效果图18 7.5LinkedList泛型类使用LinkedList泛型类可以创建链表结构的数据对象。链表是由若干个节点组成的一种数据结构,每个节点含有一个数据和下一个节点的引用(单链表),或含有一个数据以及上一个节点的引用和下一个节点的引用(双链表),节点的索引从0开始。链表适合动态改变它存储的数据,如增加、删除节点等。19 1.LinkedList对象java.util包中的LinkedList泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。例如,LinkedListmylist=newLinkedList();创建一个空双链表。然后mylist可以使用add(Stringobj)方法向链表依次增加节点,节点中的数据是参数obj指定对象的引用,如mylist.add("How");mylist.add("Are");mylist.add("You");mylist.add("Java");这时,双链表mylist就有了有4个节点,节点是自动连接在一起的,不需要我们去做连接。也就是说,不需要我们去操作安排节点中所存放的下一个或上一个节点的引用。20 2.常用方法-1*publicbooleanadd(Eelement)向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的对象。*publicvoidadd(intindex,Eelement)向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的对象。*publicvoidaddFirst(Eelement)向链表的头添加新节点,该节点中的数据是参数elememt指定的对象。*publicvoidaddLast(Eelement)向链表的末尾添加新节点,该节点中的数据是参数elememt指定的对象。*publicvoidclear()删除链表的所有节点,使当前链表成为空链表。*publicEremove(intindex)删除指定位置上的节点。*publicbooleanremove(Eelement)删除首次出现含有数据element的节点。*publicEremoveFirst()删除第一个节点,并返回这个节点中的对象。*publicEremoveLast()删除最后一个节点对象,并返回这个节点中的对象。*publicEget(intindex)得到链表中指定位置处节点中的对象。*publicEgetFirst()得到链表中第一个节点中的对象。*publicEgetLast()得到链表中最后一个节点中的对象。21 2.常用方法-2*publicintindexOf(Eelement)返回含有数据element的节点在链表中首次出现的位置,如果链表中无此节点则返回-1。*publicintlastIndexOf(Eelement)返回含有数据element的节点在链表中最后出现的位置,如果链表中无此节点则返回-1。*publicEset(intindex,Eelement)将当前链表index位置节点中的对象element替换为参数element指定的对象。并返回被替换的对象。*publicintsize()返回链表的长度,即节点的个数。*publicbooleancontains(Objectelement)判断链表节点中是否有节点含有对象element。*publicObjectclone()得到当前链表的一个克隆链表,该克隆链表中节点数据的改变不会影响到当前链表中节点的数据,反之亦然。例7-8使用了上述一些方法(效果如图7.5所示)。22 例子7-8效果图23 3.遍历链表可以借助泛型类Iterator实现遍历链表,一个链表对象可以使用iterator()方法返回一个Iterator类型的对象,该对象中每个数据成员刚好是链表节点中的数据,而且这些数据成员是按顺序存放在Iterator对象中的。Iterator对象使用next()方法可以得到它中的数据成员。显然,使用Iterator对象遍历链表要比链表直接使用get()方法遍历链表的速度快。例7-9中,我们把学生的成绩存放在一个链表中,并实现了遍历链表。24 4.LinkedList泛型类实现的接口LinkedList泛型类实现了泛型接口List,而List接口是Collection接口的子接口。LinkedList类中的绝大部分方法都是接口方法的实现。编程时,可以使用接口回调技术,即把LinkedList对象的引用赋值给Collection接口变量或List接口变量,那么接口就可以调用类实现的接口方法。25 5.JDK1.5之前的LinkedList类JDK1.5之前没有泛型的LinkedList类,可以用普通的LinkedList创建一个链表对象,如LinkedListmylist=newLinkedList();创建了一个空双链表,然后mylist链表可以使用add(Objectobj)方法向这个链表依次添加节点。由于任何类都是Object类的子类,因此可以把任何一个对象作为链表节点中的对象。需要注意的是,使用get()获取一个节点中的对象时,要用类型转换运算符转换回原来的类型。Java泛型的主要目的是可以建立具有类型安全的集合框架,如链表、散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。JDK1.5是支持泛型的编译器,它将运行时类型检查提前到编译时执行,使代码更安全。如果使用旧版本的LinkedList类,JDK1.5编译器会给出警告信息,但程序仍能正确运行。下面是使用旧版本LinkedList的例子。例7-1026 7.6HashSet泛型类HashSet泛型类在数据组织上类似数学上的集合,可以进行“交”、“并”、“差”等运算。1.HashSet对象HashSet泛型类创建的对象称为集合,如HashSetset=HashSet();那么set就是一个可以存储String类型数据的集合,set可以调用add(Strings)方法将String类型的数据添加到集合中,添加到集合中的数据称做集合的元素。集合不允许有相同的元素,也就是说,如果b已经是集合中的元素,那么再执行set.add(b)操作是无效的。集合对象的初始容量是16个字节,装载因子是0.75。也就是说,如果集合添加的元素超过总容量的75%时,集合的容量将增加一倍。27 2.常用方法◆publicbooleanadd(Eo)向集合添加参数指定的元素。◆publicvoidclear()清空集合,使集合不含有任何元素。◆publicbooleancontains(Objecto)判断参数指定的数据是否属于集合。◆publicbooleanisEmpty()判断集合是否为空。◆publicbooleanremove(Objecto)集合删除参数指定的元素。◆publicintsize()返回集合中元素的个数。◆Object[]toArray()将集合元素存放到数组中,并返回这个数组。◆booleancontainsAll(HanshSetset)判断当前集合是否包含参数指定的集合。◆publicObjectclone()得到当前集合的一个克隆对象,该对象中元素的改变不会影响到当前集合中元素,反之亦然。可以借助泛型类Iterator实现遍历集合,一个集合对象可以使用iterator()方法返回一个Iterator类型的对象。如果集合是“Student类型”的集合,即集合中的元素是Student类创建的对象,那么该集合使用iterator()方法返回一个Iterator类型的对象,该对象使用next()方法遍历集合。例7-11中,把学生的成绩存放在一个集合中,并实现了遍历集合(效果如图7.6所示)。28 例子7-11效果图29 3.集合的交、并与差集合对象调用booleanaddAll(HashSetset)方法可以和参数指定的集合求并运算,使得当前集合成为两个集合的并。集合对象调用booleanbooleanretainAll(HashSetset)方法可以和参数指定的集合求交运算,使得当前集合成为两个集合的交。集合对象调用booleanbooleanbooleanremoveAll(HashSetset)方法可以和参数指定的集合求差运算,使得当前集合成为两个集合的差参数指定的集合必须和当前集合是同种类型的集合,否则上述方法返回false。例7-12求2个集合A、B的对称差集合,即求,(效果如图7.7所示)。30 4.HashSet泛型类实现的接口HashSet泛型类实现了泛型接口Set,而Set接口是Collection接口的子接口。HashSet类中的绝大部分方法都是接口方法的实现。编程时,可以使用接口回调技术,即把HashSet对象的引用赋值给Collection接口变量或Set接口变量,那么接口就可以调用类实现的接口方法。返回31 7.7HashMap泛型类HashMap也是一个很实用的类,HashMap对象采用散列表这种数据结构存储数据,习惯上称HashMap对象为散列映射对象。散列映射用于存储键/值数据对,允许把任何数量的键/值数据对存储在一起。键不可以发生逻辑冲突,两个数据项不要使用相同的键,如果出现两个数据项对应相同的键,那么先前散列映射中的键/值对将被替换。散列映射在它需要更多的存储空间时会自动增大容量。最好使用散列映射来存储要查找的数据,使用散列映射可以减少检索的开销。32 1.HashMap对象HashMap泛型类创建的对象称为散列映射,如HashMaphashtable=HashMap();那么,hashtable就可以存储键/值对数据,其中的键必须是一个String对象,键对应的值必须是Student对象。hashtable可以调用publicVput(Kkey,Vvalue)将键/值对数据存放到散列映射中,该方法同时返回键所对应的值。33 2.常用方法*publicvoidclear()清空散列映射。*publicObjectclone()返回当前散列映射的一个克隆。*publicbooleancontainsKey(Objectkey)如果散列映射有键/值对使用了参数指定的键,方法返回true,否则返回false。*publicbooleancontainsValue(Objectvalue)如果散列映射有键/值对的值是参数指定的值,方法返回true,否则返回false。*publicVget(Objectkey)返回散列映射中使用key作为键的键/值对中的值。*publicbooleanisEmpty()如果散列映射不含任何键/值对,方法返回true,否则返回false。*publicVremove(Objectkey)删除散列映射中键为参数指定的键/值对,并返回键对应的值。*publicintsize()返回散列映射的大小,即散列映射中键/值对的数目。34 3.遍历散列映射如果想获得散列映射中所有键/值对中的值,首先使用publicCollectionvalues()方法返回一个实现Collection接口类创建的对象的引用,并要求将该对象的引用返回到Collection接口变量中。values()方法返回的对象中存储了散列映射中所有键/值对中的“值”,这样接口变量就可以调用类实现的方法,如获取Iterator对象,然后输出所有的值。例7-13使用了散列映射的常用方法,并遍历了散列映射(效果如图7.8所示)。35 4.HashMap泛型类实现的接口HashMap泛型类实现了泛型接口Map,HashMap>类中的绝大部分方法都是Map接口方法的实现。编程时,可以使用接口回调技术,即把HashMap对象的引用赋值给Map接口变量,那么接口就可以调用类实现的接口方法。36 7.8TreeSet泛型类TreeSet类是实现Set接口的类,TreeSet泛型类创建的对象称为树集,如TreeSettree=TreeSet();那么tree就是一个可以存储Student对象的集合,tree可以调用add(Students)方法将Student对象添加到树集中。树集用add()方法增加节点,节点会按其存放的数据的“大小”顺序一层一层地依次排列,在同一层中的节点从左到右按“大小”顺序递增排列,下一层的都比上一层的小。为了能使树集按大小关系排列节点,要求添加到树集中的节点中的对象必须是实现Comparable接口类所创建的对象,这样树集就可以按对象的大小关系排列节点。如:TreeSetmytree=newTreeSe();然后使用add()方法为树集添加节点:mytree.add("boy");mytree.add("zoo");mytree.add("apple");mytree.add("girl");当一个树集中的数据是实现Comparable接口类创建的对象时,节点就按对象的大小关系顺序排列。37 TreeSet类的常用方法*publicbooleanadd(Eo)向树集添加加对象,添加成功返回true,否则返回false。*publicvoidclear()删除树集中的所有对象。*publicvoidcontains(Objecto)如果包含对象o方法返回true,否则返回false。*publicEfirst()返回树集中的第一个对象(最小的对象)。*publicElast()返回最后一个对象(最大的对象)。*publicisEmpty()判断是否是空树集,如果树集不含对象返回true。*publicbooleanremove(Objecto)删除树集中的对象o。*publicintsize()返回树集中对象的数目。例7-14使用了树集,其中的Student类实现了Comparable接口,按成绩的高低规定了Student对象的大小关系。树集将Student对象作为节点中数据添加到该树集中(效果如图7.10所示)。38 使用树集注意事项注:树集中不允许出现大小相等的两个节点。例如,在上述例子中如果再添加语句st4=newStudent(90,"zhanying");mytree.add(st4);是无效的。如果允许成绩相同,可把上述例子中Student类中的compareTo方法更改为:publicintcompareTo(Objectb){Studentst=(Student)b;if((this.english-st.English)==0)return1;elsereturn(this.english-st.english);}39 7.9TreeMap泛型类reeMap类实现了Map接口。TreeMap提供了按排序顺序存储关键字/值对的有效手段。应该注意的是,不像散列映射(HashMap),树映射(TreeMap)保证它的元素按照关键字升序排列。下面是TreeMap的构造函数:TreeMap()TreeMap(Comparatorcomp)第一种形式构造的树映射,按关键字的大小顺序来排序树映射中的关键字/值对,关键字的大小顺序是按其字符串表示的字典顺序。第二种形式构造的树映射,关键字的大小顺序按Comparator接口规定的大小顺序,树映射按关键字的大小顺序来排序树映射中的关键字/值对。TreeMap类的常用方法与HashMap类相似。例7-15使用了TreeMap,分别按照学生的身高和体重排序对象(效果如图7.11所示)。40 例子7-15效果图41 7.10Stack泛型类堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。堆栈把第一个放入该堆栈的数据放在最底下,而把后续放入的数据放在已有数据的上面,如图7.12所示。使用java.util包中的Stack类创建一个堆栈对象,堆栈对象可以使用如下方法publicEpush(Eitem);输入数据,实现入栈操作;publicEpop();输出数据,实现出栈操作;publicbooleanempty();判断堆栈是否还有数据,有数据返回false,否则返回true;publicEpeek();获取堆栈顶端的数据,但不删除该数据;publicintsearch(Objectdata);获取数据在堆栈中的位置,最顶端的位置是1,向下依次增加,如果堆栈不包含此数据,则返回-1。例7-16用堆栈输出该递归序列的若干项。42 例子7-16效果图返回43 44

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭