java中常用实用类.ppt_第1页
java中常用实用类.ppt_第2页
java中常用实用类.ppt_第3页
java中常用实用类.ppt_第4页
java中常用实用类.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

* 1 第7章 常用实用类 n Date类和Calendar类 n Math类与Biglnteger类 n数字格式化 n LinkedList泛型类 n HashSet泛型类 n HashMap泛型类 n TreeSet泛型类 n TreeMap泛型类 n Stack泛型类 * 2 7.1 Date类 1Date对象 Date类在java.util包中。使用Date类的无参数构造方法创建的对象可以获 取本地当前时间。 用Date的构造方法Date(long time)创建的Date对象表示相对1970年1月1 日0点(GMT)的时间,如参数time取值60601000秒,表示Thu Jan 01 01:00:00 GMT 1970。 System类的静态方法 public long currentTimeMillis()可以获取系统当 前时间,这个时间是从1970年1月1日0点(GMT)到目前时刻所走过的毫秒数 (这是一个不小的数)。 可以根据currentTimeMillis()方法得到的数字,用Date的构造方法 Date(long time)来创建一个本地日期的Date对象。 * 3 2格式化时间 Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年, 如 Sat Apr 28 21:59:38 CST 2001 可以使用DateFormat的子类SimpleDateFormat来实现日期的格式化。 SimpleDateFormat有一个常用构造方法: public SimpleDateFormat(String pattern) 该构造方法可以用参数pattern指定的格式创建一个对象sdf,sdf调用 public String format(Date date)方法格式化时间参数date指定的时间对象 ,format方法将根据创建sdf对象时所使用的参数pattern返回一个字符串对象 formatTime: String formatTime=sdf.format(new Date(); 需要注意的是,当使用SimpleDateFormat(String pattern)构造对象sdf 时,参数pattern中应当含有“时间元字符”,例如,对于:pattern=yyyy-mm-dd ,如果当前机器的时间是2008年8月12日,那么sdf.format(new Date()返回 的字符串就是2008-08-12,也就是说sdf.format(new Date()返回的字符串就 是将pattern中的时间元字符:yyyy,mm和dd替换相应的时间数据之后的一个 字符串。 * 4 常用时间元字符: y,yy:2位数字年份,如98。 yyyy:4位数字年份,如2008。 M,MM:2位数字月份,如08 MMM:汉字月份,如八月。 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种格式输出时间。 * 5 7.2 Calendar类 Calendar类在java.util包中。Calendar类的static方法getInstance()可以 初始化一个日历对象,如 Calendar calendar= Calendar.getInstance(); 然后,calendar对象可以调用方法: public final void set(int year,int month,int date) public final void set(int year,int month,int date,int hour,int minute) public final void set(int year,int month,int date,int hour,int minute,int second) 将日历翻到任何一个时间,当参数year取负数时表示公元前。 public int get(int field) 可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的 静态常量指定。例如,calendar.get(Calendar.MONTH); 返回一个整数(0表示当前日历是在一月, 1表示当前日历是在二月等)。 日历对象调用 public long getTimeInMillis() 可以将时间表示为毫秒。 例7-2使用Calendar来表示时间,并计算了1931年9月18日和1945年8月15日之 间相隔的天数。效果图 例7-3输出1931年9月的日历(效果如图7.1所示)。 * 6 例子7-2,例子7-3效果图 例子7-2效果图 * 7 7.3 Math类与BigInteger类 1Math类 java.lang包中的类包含许多用来进行科学计算的类方法,这 些方法可以直接通过类名调用。 Math类还有两个静态常量:E和PI,它们的值分别是 2.7182828284590452354和3.14159265358979323846。 * 8 Math类的常用方法: public static long abs(double a) 返回a的绝对值。 public static double max(double a,double b) 返回a、b的最大值 。 public static double min(double a,double b) 返回a、b的最小值 。 public static double random()产生一个0到1之间的随机数(不包括0和1)。 public static double pow(double a,double b) 返回a的b次幂。 public static double sqrt(double a) 返回a的平方根。 public static double log(double a) 返回a的对数。 public static double sin(double a) 返回正弦值。 public static double asin(double a) 返回反正弦值 * 9 对数字格式化-NumberFormat类 java.text包中的NumberFormat类,该类调用类方法 public static final NumberFormat getInstance() 实例化一个NumberFormat对象,该对象调用 public final String format(double number) 方法可以格式化数字number。 NumberFormat类有如下常用方法: public void setMaximumFractionDigits(int newValue) public void setMinimumFractionDigits(int newValue) public void setMaximumIntegerDigits(int newValue) public void setMinimumIntegerDigits(int newValue) 例7-4用一定的格式输出10的平方根,通过一个20次的循环,每次获取1 8之间的一个随机数(效果如图7.2所示)。 例7-5使用自己编写的MyNumberFormat类中的方法格式化10的平方根(效 果如图7.3所示)。 * 10 例子7-4,例子7-5效果图 * 11 2BigInteger类 java.math包中的BigInteger类提供任意精度的整数运算。可以 使用构造方法 public BigInteger(String val) 构造一个十进制的BigInteger对象。该构造方法可以发生 NumberFormatException异常。也就是说,字符串参数val中如果 含有非数字字母就会发生NumberFormatException异常. * 12 BigInteger类的常用方法 public BigInteger add(BigInteger val) 返回当前大整数对象与参数指定的大整数对 象的和。 public BigInteger subtract(BigInteger val) 返回当前大整数对象与参数指定的 大整数对象的差。 public BigInteger multiply(BigInteger val) 返回当前大整数对象与参数指定的 大整数对象的积。 public BigInteger divide(BigInteger val) 返回当前大整数对象与参数指定的大 整数对象的商。 public BigInteger remainder(BigInteger val) 返回当前大整数对象与参数指定 的大整数对象的余。 public int compareTo(BigInteger val) 返回当前大整数对象与参数指定的大整 数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等 于参数指定的大整数。 public BigInteger abs()返回当前大整数对象的绝对值。 public BigInteger pow(int exponent) 返回当前大整数对象的exponent次幂。 public String toString()返回当前大整数对象十进制的字符串表示。 public String toString(int p) 返回当前大整数对象p进制的字符串表示。 例7-6计算了2个大整数的和、差、积和商,并计算出了一个大整数的因子个数 。 * 13 例子7-6效果图 * 14 7.4 数字格式化 所谓数字格式化,就是按着指定格式得到一个字 符串。 例如,希望3.141592最多保留2位小数,那么得到的 格式化字符串应当是“3.14“; 希望整数1234789按“千”分组,那么得到的格式化字 符串应当是“1,234,789“; 数字59.88887的小数保留3位小数、整数部分至少要 显示3位,那么得到的格式化字符串应当是“059.889“。 * 15 1Formatter类 Formatter类提供了一个和C语言printf函数类似的format方法: format(格式化模式,值列表) 该方法按着“格式化模式”返回“值列表”的字符串表示。 1)格式化模式: 用双引号括起的字符序列(字符串),该字符序列中的字符由格 式符和普通字符所构成。例如:“输出结果%d,%f,%d“中的%d和%f是格式符号; 开始的4个汉字、中间的两个逗号是普通字符。格式符将被替换。例如: String s = String.format(“%.2f“,3.141592); 那么s就是“3.14“。 2)值列表: 是用逗号分隔的变量、常量或表达式。要保证format方法“格式化 模式”中的格式符的个数与“值列表”中列出的值的个数相同。例如: String s=format(“%d元%0.3f公斤%d台“,888,999.777666,123); 那么s就是:“888元999.778公斤123台“。 3)格式化顺序: format方法默认按从左到右的顺序使用“格式化模式”中的格式 符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样。例如 ,假设int型变量x和double型变量的值分别是888和3.1415926,那么对于 String s = format(“从左向右:%d,%.3f,%d“,x,y,100); 字符串s就是:从左向右:888,3.142,100 * 16 2格式化整数 1)%d,%o,%x和%X 可格式化byte、Byte、short、Short、int、Integer、long和Long型数据,如 , String s = String.format(“%d,%o,%x,%X“,703576,703576,703576,703576); 字符串s就是:703576,2536130,abc58,ABC58 2)修饰符: 加号修饰符“+”,逗号修饰符“,” 如 String s=String.format(“按千分组:%,d。按千分组带正号%+,d“,1235678, 9876); 字符串s就是:按千分组:1,235,678。按千分组带正号+9,876 3)数据的宽度: “%md“,或“%-md“, String s=String.format(“%8d“,59); 字符串s就是:“ 59“,其长度(s.length())为8, s在59左面添加了6个空格字符。 注:如果实际数字的宽度大于格式中指定的宽度,就按数字的实际宽度进行格式化。 可以在宽度的前面增加前缀0,表示用数字0来填充宽度左面的富裕部分,如: String s=String.format(“%08d“,12); 字符串s就是:“00000012“,其长度(s.length())为8,即s在12的左面添加了 6个数字0。 * 17 3格式化浮点数 1)%f,%e(%E),%g(%G)和%a(%A)可格式化float、Float、 double和Double,如: String s = String.format(“%f,%e“,13579.98,13579.98); 字符串s就是13579.980000,1.357998e+04 2)修饰: 加号修饰符“+”,逗号修饰符“,” 如: String s=String.format(“整数部分按千分组:%,f。按千分组带正%+,f“,1235678.9876); 字符串s就是整数部分按千分组:+1,235,678.987600 3)限制小数位数与数据的“宽度” “%.nf“ n是保留的小数位数,如 %.3f将6.1256格式化为“3.126“(保留3位小数)。 “%mf“ , “%-md“规定宽度(在数字的左,右面增加空格)如: String s=String.format(“%11f“,59.88); 字符串s就是“ 59.880000“,s在数字左面添加了2个空格字符. “%m.n“ 指定宽度的同时也可以限制小数位数,如: String s=String.format(“%11.2f“,59.88); 字符串s就是:“ 59.88“,即s在59.88左面添加了6个空格字符。 例7-7格式化数字,运行效果如图7.4。 * 18 例子7-7效果图 * 19 7.5 LinkedList泛型类 使用LinkedList泛型类可以创建链表结构的 数据对象。 链表是由若干个节点组成的一种数据结构,每个 节点含有一个数据和下一个节点的引用(单链表), 或含有一个数据以及上一个节点的引用和下一个节点 的引用(双链表),节点的索引从0开始。 链表适合动态改变它存储的数据,如增加、删除 节点等。 * 20 1LinkedList对象 java.util包中的LinkedList泛型类创建的对象以链表结构存 储数据,习惯上称LinkedList类创建的对象为链表对象。例如, LinkedList mylist=new LinkedList(); 创建一个空双链表。然后mylist可以使用add(String obj)方法向 链表依次增加节点,节点中的数据是参数obj指定对象的引用,如 mylist.add(“How“); mylist.add(“Are“); mylist.add(“You“); mylist.add(“Java“); 这时,双链表mylist就有了有个节点,节点是自动连接在一 起的,不需要我们去做连接。也就是说,不需要我们去操作安排 节点中所存放的下一个或上一个节点的引用。 * 21 2常用方法-1 *public boolean add(E element) 向链表末尾添加一个新的节点,该节点中的数 据是参数elememt指定的对象。 *public void add(int index, E element) 向链表的指定位置添加一个新的节点, 该节点中的数据是参数elememt指定的对象。 *public void addFirst(E element) 向链表的头添加新节点,该节点中的数据是 参数elememt指定的对象。 *public void addLast(E element) 向链表的末尾添加新节点,该节点中的数据 是参数elememt指定的对象。 *public void clear() 删除链表的所有节点,使当前链表成为空链表。 *public E remove(int index) 删除指定位置上的节点。 *public boolean remove(E element) 删除首次出现含有数据element的节点。 *public E removeFirst() 删除第一个节点,并返回这个节点中的对象。 *public E removeLast() 删除最后一个节点对象,并返回这个节点中的对象。 *public E get(int index) 得到链表中指定位置处节点中的对象。 *public E getFirst() 得到链表中第一个节点中的对象。 *public E getLast() 得到链表中最后一个节点中的对象。 * 22 2常用方法-2 *public int indexOf(E element) 返回含有数据element的节点在 链表中首次出现的位置,如果链表中无此节点则返回-1。 *public int lastIndexOf(E element) 返回含有数据element的节点 在链表中最后出现的位置,如果链表中无此节点则返回-1。 *public E set(int index ,E element) 将当前链表index位置节点中 的对象element替换为参数element指定的对象。并返回被替换的 对象。 *public int size() 返回链表的长度,即节点的个数。 *public boolean contains(Object element) 判断链表节点中是否 有节点含有对象element。 *public Object clone() 得到当前链表的一个克隆链表,该克隆链 表中节点数据的改变不会影响到当前链表中节点的数据,反之亦 然。 例7-8使用了上述一些方法(效果如图7.5所示)。 * 23 例子7-8效果图 * 24 3遍历链表 可以借助泛型类Iterator实现遍历链表,一个链表对象可以 使用iterator()方法返回一个Iterator类型的对象,该对象中每个 数据成员刚好是链表节点中的数据,而且这些数据成员是按顺序 存放在Iterator对象中的。 Iterator对象使用next()方法可以得到它中的数据成员。显然, 使用Iterator对象遍历链表要比链表直接使用get()方法遍历链表的 速度快。 例7-9中,我们把学生的成绩存放在一个链表中,并实现了遍 历链表。 * 25 4LinkedList泛型类实现的接口 LinkedList泛型类实现了泛型接口List,而List 接口是Collection接口的子接口。 LinkedList类中的绝大部分方法都是接口方法的实现。编 程时,可以使用接口回调技术,即把LinkedList对象的引用 赋值给Collection接口变量或List接口变量,那么接口就 可以调用类实现的接口方法。 * 26 5JDK1.5之前的LinkedList类 JDK 1.5之前没有泛型的LinkedList类,可以用普通的LinkedList创建一个 链表对象,如 LinkedList mylist=new LinkedList(); 创建了一个空双链表,然后mylist链表可以使用add(Object obj)方法向这 个链表依次添加节点。 由于任何类都是Object类的子类,因此可以把任何一个对象作为链表节 点中的对象。需要注意的是,使用get()获取一个节点中的对象时,要用类型 转换运算符转换回原来的类型。 Java泛型的主要目的是可以建立具有类型安全的集合框架,如链表、散 列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结 构时,不必进行强制类型转换,即不要求进行运行时类型检查。JDK 1.5是支 持泛型的编译器,它将运行时类型检查提前到编译时执行,使代码更安全。 如果使用旧版本的LinkedList类,JDK 1.5编译器会给出警告信息,但程 序仍能正确运行。下面是使用旧版本LinkedList的例子。 例7-10 * 27 7.6 HashSet泛型类 HashSet泛型类在数据组织上类似数学上的集合,可以进 行“交”、“并”、“差”等运算。 1HashSet对象 HashSet泛型类创建的对象称为集合,如 HashSet set= HashSet(); 那么set就是一个可以存储String类型数据的集合,set可以调 用add(String s)方法将String类型的数据添加到集合中,添加到集 合中的数据称做集合的元素。集合不允许有相同的元素,也就是 说,如果b已经是集合中的元素,那么再执行set.add(b)操作是无 效的。集合对象的初始容量是16个字节,装载因子是0.75。也就 是说,如果集合添加的元素超过总容量的75%时,集合的容量将 增加一倍。 * 28 2常用方法 public boolean add(E o) 向集合添加参数指定的元素。 public void clear() 清空集合,使集合不含有任何元素。 public boolean contains(Object o) 判断参数指定的数据是否属于集合。 public boolean isEmpty() 判断集合是否为空。 public boolean remove(Object o) 集合删除参数指定的元素。 public int size() 返回集合中元素的个数。 Object toArray() 将集合元素存放到数组中,并返回这个数组。 boolean containsAll(HanshSet set) 判断当前集合是否包含参数指定的集合。 public Object clone() 得到当前集合的一个克隆对象,该对象中元素的改变不 会影响到当前集合中元素,反之亦然。 可以借助泛型类Iterator实现遍历集合,一个集合对象可以使用iterator() 方法返回一个Iterator类型的对象。如果集合是“Student类型”的集合,即集 合中的元素是Student类创建的对象,那么该集合使用iterator()方法返回一个 Iterator类型的对象,该对象使用next()方法遍历集合。 例7-11中,把学生的成绩存放在一个集合中,并实现了遍历集合(效果如图7.6所 示)。 * 29 例子7-11效果图 * 30 3集合的交、并与差 集合对象调用boolean addAll(HashSet set)方法可以和参数指 定的集合求并运算,使得当前集合成为两个集合的并。 集合对象调用boolean boolean retainAll (HashSet set)方法可 以和参数指定的集合求交运算,使得当前集合成为两个集合的交 。 集合对象调用boolean boolean boolean removeAll (HashSet set)方法可以和参数指定的集合求差运算,使得当前集合成为两 个集合的差 参数指定的集合必须和当前集合是同种类型的集合,否则上述 方法返回false。 例7-12求2个集合A、B的对称差集合,即求,(效果如图7.7 所示)。 * 31 4HashSet泛型类实现的接口 HashSet泛型类实现了泛型接口Set,而Set接 口是Collection接口的子接口。 HashSet类中的绝大部分方法都是接口方法的实现。编 程时,可以使用接口回调技术,即把HashSet对象的引用 赋值给Collection接口变量或Set接口变量,那么接口 就可以调用类实现的接口方法。 返回 * 32 7.7 HashMap泛型类 HashMap也是一个很实用的类,HashMap对象 采用散列表这种数据结构存储数据,习惯上称HashMap 对象为散列映射对象。 散列映射用于存储键/值数据对,允许把任何数量的键/值数 据对存储在一起。键不可以发生逻辑冲突,两个数据项不要使 用相同的键,如果出现两个数据项对应相同的键,那么先前散 列映射中的键/值对将被替换。 散列映射在它需要更多的存储空间时会自动增大容量。 最好使用散列映射来存储要查找的数据,使用散列映射可以 减少检索的开销。 * 33 1HashMap对象 HashMap泛型类创建的对象称为散列映射,如 HashMap hashtable= HashMap(); 那么,hashtable就可以存储键/值对数据,其中的键 必须是一个String对象,键对应的值必须是Student对 象。 hashtable可以调用public V put(K key,V value)将 键/值对数据存放到散列映射中,该方法同时返回键 所对应的值。 * 34 2常用方法 *public void clear() 清空散列映射。 *public Object clone() 返回当前散列映射的一个克隆。 *public boolean containsKey(Object key) 如果散列映射有键/值对使 用了参数指定的键,方法返回true,否则返回false。 *public boolean containsValue(Object value) 如果散列映射有键/值 对的值是参数指定的值,方法返回true,否则返回false。 *public V get(Object key) 返回散列映射中使用key作为键的键/值对中 的值。 *public boolean isEmpty() 如果散列映射不含任何键/值对,方法返回 true,否则返回false。 *public V remove(Object key) 删除散列映射中键为参数指定的键/值对 ,并返回键对应的值。 *public int size() 返回散列映射的大小,即散列映射中键/值对的数目。 * 35 3遍历散列映射 如果想获得散列映射中所有键/值对中的值,首先使用 public Collection values() 方法返回一个实现Collection接口类创建的对象的引用, 并要求将该对象的引用返回到Collection接口变量中。 values()方法返回的对象中存储了散列映射中所有键/值对中的“ 值”,这样接口变量就可以调用类实现的方法,如获取Iterator对 象,然后输出所有的值。 例7-13使用了散列映射的常用方法,并遍历了散列映射(效 果如图7.8所示)。 * 36 4HashMap泛型类实现的接口 HashMap泛型类实现了泛型接口Map, HashMap类中的绝大部分方法都是Map接口方法的实 现。编程时,可以使用接口回调技术,即把HashMap对象的 引用赋值给Map接口变量,那么接口就可以调用类实现的接 口方法。 * 37 7.8 TreeSet泛型类 TreeSet 类是实现Set接口的类,TreeSet 泛型类创建的对象称为树 集,如 TreeSet tree= TreeSet (); 那么tree就是一个可以存储Student对象的集合,tree可以调用add(Student s)方法将Student对象添加到树集中。 树集用add()方法增加节点,节点会按其存放的数据的“大小”顺序一层一层 地依次排列,在同一层中的节点从左到右按“大小”顺序递增排列,下一层的都 比上一层的小。 为了能使树集按大小关系排列节点,要求添加到树集中的节点中的对象必 须是实现Comparable接口类所创建的对象,这样树集就可以按对象的大小关系 排列节点。如: TreeSet mytree=new TreeSe(); 然后使用add()方法为树集添加节点: mytree.add(“boy“); mytree.add(“zoo“); mytree.add(“apple“); mytree.add(“girl“); 当一个树集中的数据是实现Comparable接 口类创建的对象时,节点就按对象的大小关 系顺序排列。 * 38 TreeSet 类的常用方法 *public boolean add(E o) 向树集添加加对象,添加成功返回true,否则返回 false。 *public void clear() 删除树集中的所有对象。 *public void contains(Object o) 如果包含对象o方法返回true,否则返回false。 *public E first() 返回树集中的第一个对象(最小的对象)。 *public E last(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论