《高等教育工具类及常用算法》由会员分享,可在线阅读,更多相关《高等教育工具类及常用算法(58页珍藏版)》请在金锄头文库上搜索。
1、Java程序设计第7章 工具类及常用算法Java根底类库nJDK中提供的根底类库又称为JFC(java Foundation Class Library),其中包含很多包,每个包中都有假设干特定功能和相互关系的类和接口。一些经常使用的包为:包 /默认加载的包包包包包包 Java语言根底类n这个包包含了运行程序不可少的类,包括根本数据类,根本数学类,字符串处理,异常处理等等。该包在程序时自动引入。n n标准的输入输出类库,包含程序与系统,用户以及其他程序做的数据交换使用的类,包括根本I/O,文件I/O等。完成与操作系统有关的nI/O操作需要用到该包。Java语言根底类包括一些实用工具,如Date
2、类,Vector类,Stack类等。使用它们可以方便编程。n 图形用户界面(GUI)类库。包括许多界面和资源,如Graphics类,Container类等等。可以利用该包编写标准化的应用程序界面。n 用来实现运行于浏览器中的Java Applet的工具类库,常用的类是。Java语言根底类n其他包n还有一些其他的包,如是实现远过程调用功能,可以在远程机器上创立对象,在本地机器上使用;包是实现JDBC的类库。利用这个包可以是程序访问不同类型的数据库。只要安装了对应的驱动程序,同一个程序就可以访问不同的数据库。n如果想要详细了解这些系统的类库,可以参考JDK的文档。Java语言根底类nObject类
3、nObject类是所有类的直接或间接父类,也是类库当中所有类的父类,可以和任意类型的对象匹配。所以可以用它作为形参的类型,那么不管何种类型的实际参数都可以与这个形参匹配,从而扩大了方法得适用范围。n常用得方法:nprotected Object clone(); /生成当前对象得备份npublic boolean equals(Object obj); /比较两个对象npublic String toString();/返回当前对象得相关信息n Java语言根底类n equals方法n该方法用来比较两个对象是否相同,相同返回true,否那么返回false。n如果一个类没有覆盖equals方法,
4、那么这时候的相等是指两个引用相等,也就是说他们引用的是同一个对象。Java语言根底类n equals方法n运算符n关系运算符生成的是一个“布尔结果。它评价的是运算对n象值之间的关系。运算符适用于所有对象,但它的含n义通常会使人找不到北。见例子n一般人都会认为输出结果肯定先是true,再是false,因为n两个Integer对象都是相同的。但尽管对象的内容相同,n句柄却是不同的,而=比较的正好就是对象句柄。所以n输出结果实际上先是false,再是true。Java语言根底类n equals方法n假设想比照两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equal
5、s()。例子n正如我们预计的那样,此时得到的结果是true。n但事情并未到此结束!假设您创立了自己的类,就象下面n这样(举例)n此时的结果又变回了false!这是由于equals()的默认行为n是比较句柄。所以除非在自己的新类中改变了equals(),n否那么不可能表现出我们希望的行为。大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。Java语言根底类n equals方法n总结的来讲,也就是说:n equals()默认的是比较句柄,因为JDK中的许多n类在实现的时候都覆盖了equals()方法,所以一n般使用java类库中的equals时,比较的是对象
6、的n内容;n但是,如果用户自己定义一个类,又没有改写nequals()方法,那么它比较的是句柄,除非用户n自己写equals()方法来使得它的功能为比较对象n的内容。Java语言根底类n toString()ntoString()方法用来返回对象的字符串表示,n可以用来显示一个对象。nSystem.out.println()方法如果带的参数是一n个对象的话,那么它会自动调用对象的ntoString()方法,那么它显示的将是“类名内存地址。在自定的类中一般来讲覆盖toString()方法。n举例 2个Java语言根底类n 根本数据类型包装类njava中提供了根本数据类型的包装类,以于面向对象的思
7、想一致。对应的也有8种:nCharacter,Byte,Short,Integer,Long,Float,nDouble,Boolean。他们都是作为类来使用。n1、提供一些常数方便使用,等。n2、提供valueOf(String),toString()n3、通过xxxValue()得到所包装的值n4、对toString(),equals()等方法进行覆盖 (举例)例7-4nclass DoubleString nnpublic static void main(String args) nnndouble d;nString s;n/double转换成转换成String的几种方法的几种方法n
8、d=3.1415926;ns=+d;ns=Double.toString(d);ns=new Double(d).toString();ns=String.valueOf(d);n /string转换成转换成double的几种方法的几种方法ns=3.1414926;ntrynd=Double.parseDouble(s);nd=new Double(s).doubleValue();nd=Double.valueOf(s).doubleValue();n catch(NumberFormatException e)nn e.printStackTrace();nnn n补充:装包与拆包n之前,
9、根本数据类型和包装类不能对等使用。Integer i=new Integer(3); 装包int iv=i. intValue(); 拆包n之后,可以自动的进行装包和拆包:自动装包是指根本类型自动转化为包装类型,自动拆包指包装类自动转化为根本类型。Integer i=3;int iv=I;Java语言根底类n Math类n该类提供了一些不同标准的数学函数的方法,n这些都是static方法,所以使用的时候不用创立nMath类的对象,可以直接通过类名来调用这些n方法:Math.所要用的方法。方便编程。n关于具体的方法和属性,可以查询JDK的帮助n文档。(举例)例7-5nclass TestMath
10、 nnpublic static void main(String args) nnint a=3;ndouble b=1.5,c=32.2;ndouble f=0.0;nf=1.0/2*(a+Math.sqrt(b*Math.sin(c);nSystem.out.println(f=+f);nSystem.out.println(Math.ceil(3.1415)=+Math.ceil(3.1415);nSystem.out.println(Math.floor(3.1415)=+Math.floor(3.1415);nSystem.out.println(Math.round(987.65
11、4)=+Math.round(987.654);nSystem.out.println(Math.max(-987.654,301)=+Math.max(-987.654,301);nSystem.out.println(Math.PI=+Math.PI);nnJava语言根底类nSystem类n该类是一个非常有用的特殊类,提供了标准输n入/输出、运行时系统信息等工具。由于该类的n一些属性和方法这些都是static的,所以使用的n时候不能创立System类的对象,可以直接通过n类名来调用这些方法:System.所要用的方法。n Java语言根底类n用system类获得标准输入输出public
12、static InputStream in; public static PrintStream out; public static PrintStream err;使用这些可以从标准输入读入数据或向标准输出输出数据。n用system类的方法获得系统信息system类提供一些与运行时系统交互的方法,可以利用它们获得解释器或系统的信息,也可以向运行系统发出指令。 public static long current TimeMillis(); public static void exit(int status);例如7-6n主要用来测试主要用来测试System类的根本属性及功能类的根本属性及
13、功能*/nimport java.util.*;nclass TestSystem nnpublic static void main(String args) nnProperties a;nEnumeration ps;nIterator pi;na= System.getProperties();na.setProperty(test_path,2);n/System.setProperties(a);nSystem.out.println(System.getProperty(test_path);nSystem.out.println(System.getProperty(java.
14、version);n/*npi=a.entrySet().iterator();nwhile(pi.hasNext()nSystem.out.println(pi.next();n */n ps=a.propertyNames();n while(ps.hasMoreElements()n Object obj=ps.nextElement();n Object objVal=a.get(obj);n System.out.println(+obj+=+objVal); n nn字符数组与字符串字符数组与字符串 字符串是字符的序列,它是组织字符的根本数据结字符串是字符的序列,它是组织字符的根本
15、数据结构,从某种程度上来说有些类似于字符的数组。构,从某种程度上来说有些类似于字符的数组。 char country=C,h,i,n,a; C+? 在在Java中,字符串被当作对象来处理。程序中需要用中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创立之后不会再做修到的字符串可以分为两大类,一类是创立之后不会再做修改和变动的改和变动的String类;另一类是创立之后允许再做更改和类;另一类是创立之后允许再做更改和变化的变化的StringBuffer类。类。 Java会自动为字符串常量生成一个会自动为字符串常量生成一个String类的类的对象,所以可以直接初始化对象,所以
16、可以直接初始化String对象,如:对象,如: String s =“SCEMI XMJ!u用一个已创立的字符串创立另一个字符串,如:用一个已创立的字符串创立另一个字符串,如:u String s1=String(s);创立字符串对象创立字符串对象u使用使用String类的构造方法创立字符串对象,如:类的构造方法创立字符串对象,如:u String s=new String(“We are Chinese);uString (char a):用一个字符数组:用一个字符数组a 创立一个字符创立一个字符串对象,如:串对象,如:u char a=X, M, J;u String s=new Stri
17、ng(a); uString (char a,int startIndex,int count):提取字:提取字符数组符数组a 中的一局部字符创立一个字符串对象,如:中的一局部字符创立一个字符串对象,如:u char a=S, C, E, M, I, X, M, J;u String s=new String(a,5,3);String类常用方法类常用方法public int length() 获取字符串的长度获取字符串的长度 public boolean equals(String s) 比较当前字符串对象的实体是否与参数指定比较当前字符串对象的实体是否与参数指定的字符串的字符串s的实体相同
18、的实体相同 public boolean startsWith(String s)public boolean endsWith(String s) 判断当前字符串对象的前缀判断当前字符串对象的前缀后缀后缀是否是参数指是否是参数指定的字符串定的字符串spublic int compareTo(String s) 比较大小比较大小 等等 0;大;大 正;小正;小 负负String s1=new String(“中国中国.四川四川);String s2=new String(“中国中国.四川四川);String s3=new String(“中国中国);String s4=new String(“
19、四川四川);System.out.println(s1.length(); /?System.out.println(s3.length(); /?System.out.println(s1=s2); /?System.out.println(s1.equals(s2); /?System.out.println(s1=s2); /?System.out.println(s1=s2); /?System.out.println(s1.equals(s2); /?System.out.println(s1.startsWith(s3); /?System.out.println(s1.endsW
20、ith(s4); /?System.out.println(s1 pareTo(s2); /?System.out.println(s3 pareTo(s4); /?5 52 2falsefalsetruetrue中国中国中国中国. .四川四川四川四川truetruetruetruetruetruetruetrue0 0-2222-2222JAVA程序设计程序设计2006.02 By SCEMI XMJString类常用方法类常用方法public int indexOf(String s,int startpoint)public int lastIndexOf(String s) 返回首次出
21、现返回首次出现s的位置。的位置。没有没有 -1。public String substring(int startpoint,int end) 从从start处截取到尾部处截取到尾部end处处所得到的字符串。所得到的字符串。public String trim() 去掉前后空格去掉前后空格public String replaceAll(String old ,String new) 用参数用参数new指定的字符串替换由指定的字符串替换由old指定的所有字符串指定的所有字符串public char charAt(int index) 返回第返回第index个字符个字符String s1=new
22、 String(“中国中国.四川四川.攀枝花攀枝花);String s2=new String(“We are like Java);System.out.println(s1.indexOf(“china); /对对?System.out.println(s2.indexOf(a); /对对?System.out.println(s2.indexOf(“a); /?System.out.println(s2.lastIndexOf(“a); /?System.out.println(s2.indexOf(“a,6); /?System.out.println(s2.indexOf(“Java
23、); /?System.out.println(s1.charAt(6); /?System.out.println(s2.charAt(12); /?System.out.println(s1.substring(3); /?System.out.println(s1.substring(3,5); /?System.out.println(s1. replaceAll(., ,); /对对?System.out.println(s1. replaceAll(“., “#); /?System.out.println(s2. replaceAll(“a, “b); /? -1-1 3 33
24、3151513131212攀攀攀攀J J 四川四川四川四川. .攀枝花攀枝花攀枝花攀枝花 四川四川四川四川 语法错语法错语法错语法错#We bre like JbvbWe bre like Jbvb字符串与根本数据的相互转换字符串与根本数据的相互转换将根本类型数据转换为将根本类型数据转换为String型:型: String.valueOf(根本数据类型根本数据类型) 例:例:String.valueOf(0.34) “0.34将将String型转换为根本类型数据:型转换为根本类型数据:03-18提及提及 Integer.parseInt(String s) Double.parseDouble
25、(String s)例:例:Double.parseDouble(“12.34) 对象的字符串表示对象的字符串表示 对象名对象名.toString()Date date=new Date()date.toString()JAVA程序设计程序设计StringBuffer类类创立创立StringBuffe对象对象StringBuffer()StringBuffer(int size)StringBuffer(String s)length() 字符个数字符个数capacity() 实际容量实际容量StringBuffer sb=new StringBuffer() sb.length() /0 s
26、b.capacity() /16StringBuffer sb=new StringBuffer(32) sb.length() /0 sb.capacity() /32StringBuffer sb=new StringBuffer(“SCEMI XMJ) sb.length() /9 sb.capacity() /25=9+16StringBuffer类常用方法类常用方法void setCharAt(int n,char ch) 用字符用字符ch替换第替换第n个字符个字符StringBuffer insert(int index, String str) 将字符串将字符串str插入从插入从
27、index起的当前字符串中起的当前字符串中append 数据转化后数据转化后追加追加public StringBuffer reverse() 字符翻转字符翻转StringBuffer delete(int startpos, int endpos)删除删除startpos到到endpos-1子串子串StringBuffer replace(int n ,int m, String str) 用串用串str替换当前串从替换当前串从n到到m-1的子串的子串StringBuffer str=new StringBuffer(“123)str.append(456); /对吗对吗?str=str+“
28、789 /对吗对吗?str.append(“789); /str?System.out.println(str.setCharAt(0,a); /错错 void str.setCharAt(0,a); /str? System.out.println(str); /?str.insert(1,“*); /str?str.delete(1,4); /str?str.reverse(); /str?str.replcae(0,2,“#); /对吗对吗?str.replcae(5,7,“#); /str?str.length() /?str.capacity() /?对对 str=“123456错错
29、str=“12346789str=“a2346789str=“a*23456789str=“a23456789str=“98765432a对对 str=“#765432astr=“#76#32a10192006.02 By SCEMI XMJStringTokenizer类类分解字符串成可被独立使用的单词分解字符串成可被独立使用的单词 包包创立创立StringTokenizer对象对象 StringTokenizer(String s)StringTokenizer(String s,String delim)StringTokenizer类常用方法类常用方法 countTokens()单词计
30、数变量单词计数变量hasMoreTokens()countTokens0 truenextToken() 逐个获取单词逐个获取单词import java.util.*;public class ST public static void main(String args) String str=“中国中国.四川四川.攀枝花攀枝花; StringTokenizer st=new StringTokenizer(str,“.); int number=st.countTokens(); System.out.println(“共有单词共有单词:+number); while(st.hasMoreT
31、okens() System.out.print(number-st.countTokens()+“:); System.out.println(st.nextToken(); 共有单词共有单词:3 0:中国中国 1:四川四川 2:攀枝花攀枝花字符串数组字符串数组字符串数组:可以表示一组字符串字符串数组:可以表示一组字符串public class StrArray public static void main(String args) for(int i=0;i8 ) return false;nstudents.add(s);nreturn true;nnpublic boolean un
32、enroll(Student s)n n if(students.contains(s) n students.remove(s);n return true;nelsenreturn false;nnpublic int getTotalEnrollment()nnreturn students.size();n npublic Student getNthStudent(int n)n return (Student)students.elementAt(n);n n;n n nclass Coursen n String courseName;n double credits;n pri
33、vate EnrollmentCollection enrolledStudents;n Course(String name,double credits)n courseName=name;n this.credits=credits;n enrolledStudents =new EnrollmentCollection();n n public boolean enroll(Student s)n n return enrolledStudents.enroll(s);n n public boolean unenroll(Student s)n n return enrolledSt
34、udents.unenroll(s);n n public EnrollmentCollection getRegisteredStudent()n return enrolledStudents;n n n ;n public class TestCourseVectorn npublic static void main(String args) nnint i;nCourse c=new Course(java,1.0);nStudent s1=new Student(lifang,20);n Student s2=new Student(zhangqin,21);nStudent s3
35、=new Student(zhangqin,21);nc.enroll(s1);nc.enroll(s2);nc.enroll(s3);n EnrollmentCollection ec=c.getRegisteredStudent();n for(i=0;iec.getTotalEnrollment();i+)nStudent s=ec.getNthStudent(i);n s.printInfo();nnnArrays类n主要用于对数组进行排序和搜索的类重要的方法:sort()方法binarySearch()方法Collections类n是一个针对具有排序查找和反序等功能的类关于查找的类有
36、:public static void sort(List list);public static void sort(List list,Comparator c);public static int bianrySearch(List list,Object key);list :要查找排序的Listkey:要查找的对象Cimparator c:比较器n(1) 假设不提供Comparator,那么List中的对象必须实现接口.该接口只有一个方法:int compareTo(Object)n(2)提供Comparator,有两个方法:int Compare(Object o1,Object
37、o2);boolean equals(Object obj)/判断是否相等n例7-17import java.util.*;nclass TestCollectionsSortnnpublic static void main(String args) nnVector school =new Vector();nschool.addElement(new Person(ling,21);nschool.addElement(new Person(xiaofang,20);nschool.addElement(new Person(xiaofang,18);nSystem.out.printl
38、n(school);nCollections.sort(school);n System.out.println(school);nnnclass Person implements Comparablen String name;n int age;n public Person(String name,int age)nthis.name=name;n this.age=age;nn public String toString()nreturn name+:+age;n public int compareTo(Object obj)nPerson p1;n p1=(Person)obj
39、;n if (p1.ageage)n return -1;n return 0;n n;7.7 与集合相关的Java新特性n7.7.1 泛型原有集合中的元素统为Object类型,如传统书写一个Vector集合如下:Vector v =new Vector();v.addElement(“one);String s=(String)v.elementAt(0);存在两个问题1参加元素时,不能保证都参加相同类型的元 素;2取出元素要进行强制类型转换。n使用泛型 Vector v=new Vector(); v.addElement(“one);String s=v.elementAt(0);说明:
40、一对尖括号说明了集合中元素的类型。当参加元素时Java会对元素的类型进行检查,并且取出元素时,Java编译器可以知道其类型,不必进行强制类型转换。7.7.2 增强的for语句n原有集合中使用列举器来遍历集合中的元素 Vector album=new Vector();for(Iterator i=album.iterator();i.hasNext();)Photo photo=(Photo)i.next(); System.out.println(photo.toStirng();nnfor(Photo photo:album)nn System.out.println(photo.toString();