第7章常用实用类1.Date类2.Calendar类3.Math类与Biglnteger类4.LinkedListE泛型类5.HashSetE泛型类6.HashMapK,V泛型类7.TreeSetE泛型类8.TreeMapK,V泛型类9.StackE泛型类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.格式化时间Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年。例如:SatApr2821:59:38CST2001。我们可能希望按着某种习惯来输出时间,比如时间的序:年月星期日或年月星期日小时分秒。这时可以使用DateFormat的子类SimpleDateFormat来实现日期的格式化。SimpleDateFormat有一个常用构造方法:publicSimpleDateFormat(Stringpattern)。该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:format(Datedate)方法格式化时间对象date。需要注意的是,pattern中应当含有一些有效的字符序列。例如:ly或yy表示用2位数字输出年份;yyyy表示用4位数字输出年份。lM或MM表示用2为数字或文本输出月份,如果想用汉字输出月份,pattern中应连续包含至少3个M,如:MMM。ld或dd表示用2位数字输出日。lH或HH表示用两位数字输出小时。lm或mm表示用两位数字输出分。ls或ss表示用两位数字输出秒。lE表示用字符串输出星期。在下面的例子1中,我们用三种格式输出时间。上述程序的输出结果:现在的时间:ThuSep0209:33:55CST2004现在的时间:time:2004-09-02goodTime:2004年-09月-星期四02日-09:时33:分55:秒北京时间现在的时间:北京时间02日09时九月55秒33分星期四-3600秒表示的日期时间是:ThuJan0107:59:56CST1970-1800秒表示的日期时间是:ThuJan0107:59:58CST1970返回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取负数时表示公元前。calendar对象调用方法:publicintget(intfield)可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的静态常量指定,例如:calendar.get(Calendar.MONTH);返回一个整数,如果该整数是0表示当前日历是在一月,该整数是1表示当前日历是在二月等。日历对象调用publiclonggetTimeInMillis()可以将时间表示为毫秒。下面的例子2使用Calendar来表示时间。并计算了2005年和1949年之间相隔的天数。上述程序的输出结果:现在的时间是:2004年9月2日星期49时38分30秒2005年10月1日和1949年10月1日相隔20454天下面的例子3输出2005年10月的日历页。返回7.3Math类与BigInteger类1.Math类在编写程序时,可能需要计算一个数的平方根、绝对值、获取一个随机数等等。java.lang包中的类包含许多用来进行科学计算的类方法,这些方法可以直接通过类名调用。另外,Math类还有两个静态常量,E和PI,它们的值分别是:2.7182828284590452354和3.14159265358979323846。以下是Math类常用方法:lpublicstaticlongabs(doublea)返回a的绝对值。lpublicstaticdoublemax(doublea,doubleb)返回a、b的最大值。lpublicstaticdoublemin(doublea,doubleb)返回a、b的最小值。lpublicstaticdoublerandom()产生一个0到1之间的随机数(不包括0和1)。lpublicstaticdoublepow(doublea,doubleb)返回a的b次幂。lpublicstaticdoublesqrt(doublea)返回a的平方根。lpublicstaticdoublelog(doublea)返回a的对数。lpublicstaticdoublesin(doublea)返回正弦值。lpublicstaticdoubleasin(doublea)返回反正弦值。有时我们可能需要对输出的数字结果进行必要的格式化,例如,对于3.14356789,我们希望保留小数位为3位、整数部分至少要显示3位,即将3.14356789格式化为003.144。可以使用java.text包中的NumberFormat类,该类调用类方法:publicstaticfinalNumberFormatgetInstance()l实例化一个NumberFormat对象,该对象调用lpublicfinalStringformat(doublenumber)l方法可以格式化数字number。lNumberFormat类有如下常用方法:lpublicvoidsetMaximumFractionDigits(intnewValue)lpublicvoidsetMinimumFractionDigits(intnewValue)lpublicvoidsetMaximumIntegerDigits(intnewValue)lpublicvoidsetMinimumIntegerDigits(intnewValue)在下面的例子4中我们用一定的格式输出5的平方根,通过一个20次的循环,每次获取1到8之间的一个随机数。2.BigInteger类程序有时需要处理大整数,java.math包中的BigInteger类提供任意精度的整数运算。可以使用构造方法:publicBigInteger(Stringval)构造一个十进制的BigInteger对象。该构造方法可以发生NumberFormatException异常,也就是说,字符串参数val中如果含有非数字字母就会发生NumberFormatException异常。以下是BigInteger类的常用方法:publicBigIntegeradd(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的和。publicBigIntegersubtract(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的差。publicBigIntegermultiply(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的积。publicBigIntegerdivide(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的商。publicBigIntegerremainder(BigIntegerval)返回当前大整数对象与参数指定的大整数对象的余。publicintcompareTo(BigIntegerval)返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。publicBigIntegerabs()返回当前大整数对象的绝对值。publicBigIntegerpow(intexponent)返回当前大整数对象的exponent次幂。publicStringtoString()返回当前大整数对象十进制的字符串表示。publicStringtoString(intp)返回当前大整数对象p进制的字符串表示。在下面的例子5中,计算了2个大整数的和、差、积和商,并计算出了一个大整数的因子个数(因子中不包括1和大整数本身)。返回7.4LinkedListE泛型类使用LinkedListE泛型类可以创建链表结构的数据对象。链表是由若干个节点组成的一种数据结构,每个节点含有一个数据和下一个节点的引用(单链表),或含有一个数据并含有上一个节点的引用和下一个节点的引用(双链表),节点的索引从0开始。链表适合动态地改变它存储的数据,如,增加、删除节点等。1.LinkedListE对象java.util包中的LinkedListE泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。例如,LinkedListStringmylist=newLinkedListString();创建一个空双链表。然后mylist可以使用add(Stringobj)方法向链表依次增加节点,节点中的数据是参数obj指定对象的引用。例如:mylist.add(“How”);mylist.add(“Are”);mylist.add(“You”);mylist.add(“Java”);这时,双链表mylist就有了有4个节点,节点是自动连接在一起的,不需要我们去做连接,也就是说,不需要我们去操作安排节点中所存放的下一个或上一个节点的引用。2.常用方法以下是LinkedListE泛型类的一些常用方法。publicbooleanadd(Eelement)向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的对象。publicvoidadd(intindex,Eelement)向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的对象。publicvoidaddFirst(Eelement)向链表的头添加新节点,该节点中的数据是参数elememt指定的对象。publicEremoveFirst()删除第一个节点,并返回这个节点中的对象。publicEremoveLast()删除最后一个节点对象,并返回这个节点中的对象。publicEget(intindex)得到链表中指定位置处节点中的对象。publicEgetFirst()得到链表中第一个节点中的对象。publicEgetLast()得到链表中最后一个节点中的对象。publicintindexOf(Eelement)返回含有数据element的节点在链表中首次出现的位置,如果链表中无此节点则返回-1。publicintlastIndexOf(Eelement)返回含有数据element的节点在链表中最后出现的位置,如果链表中无此节点则返回-1。publicEset(intindex,Eelement)将当前链表index位置节点中的对象element替换为参数element指定的对象。并返回被替换的对象。publici