




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5讲工具类与算法,Java类库 语言基础类 数据结构类 查找与排序,Java类库,Java类库是系统提供的已实现的标准类的集合 Java编程的API(Application Program Interface) 系统定义好的类根据实现的功能不同划分成不同的集合,每个集合是一个包,合称为类库。 基础类库(JFC)SUN API 应用程序编程接口 面向过程语言 函数库(子程序包) 面向对象语言 类库,Java类库结构,java.lang System、Math、Thread、基本数据类型类. java.util 向量、栈、日期 java.io (用于输入输出) (用于网络编程) java.applet(编写applet小程序) java.awt(编写图形用户界面),Object类,类层次的根,每一个类都是它的子类。 构造方法:Object( ) 一般方法: Object clone( ) 生成当前对象的一个拷贝。 boolean equals(Object obj) 比较两个对象是否相同。 Class getClass() 获取当前对象所属的类信息 String toString()用来返回当前对象本身的有关信息,数学运算的Math类,属性 public final static double E; / 数学常量e public final static double PI; / 圆周率常量 方法(均为静态方法) public static int abs(int i); 求绝对值 public static double sin(double a); /sin函数 public static double log(double a); /log函数 public static double max(double a, double b); public static double pow(double a, double b); public static double random(); /产生01之间随机数,数学运算的Math类,public static double exp(double a); public static int round(float a); public static double sqrt(double a);,Math类例,public class Test public static void main(String args) System.out.println(Math.E); /2.7182818 System.out.println(Math.PI); /3.14159265 System.out.println(Math.sqrt(9.08); /3.0133038 System.out.println(Math.pow( 2,3); /8.0 System.out.println(Math.round(99.6); /100 System.out.println(Math.abs(- 8.09); /8.09 System.out.println(Math.random(); /0.14 System.out.println(Math.random(); /0.69 ,随机数,System类,实现了用户访问系统资源时的系统无关编程接口 属性标准输入输出 public static InputStream in public static PrintStream out public static PrintStream err 方法获取系统时间信息 public static long currentTimeMillis(); 获取自1970年1月1日零时至当前系统时刻的微秒数 方法强制Java虚拟机退出运行状态,并把状态信息status 返回给运行虚拟机的操作系统 public static void exit(int status); 例:System .exit(0);,System类,方法取系统属性 static String getProperty(String key) 例:显示classpath public class Test public static void main(String args) System.out.println(System.getProperty(“java.class.path“) ); ,向量类-Vector,java.util.Vector 实现链式存储结构 适合于如下的情况 需要处理的对象数目不定 序列中元素都是对象,而不是基本数据类型的量 需要做频繁的元素插入和删除 需要定位序列中的对象或其他查找操作,0 1 2 3,创建向量类对象,创建向量类的对象 Vector myVector = new Vector(); 创建空的向量对象(初始容量为10) 优化存储管理 Vector myVector = new Vector(100); 创建空的向量对象(初始容量为100) Vector myVector = new Vector(100,50); 创建空的向量对象(初始容量为100,增量为50),向量元素操作,追加元素 add(Object element) 插入元素 add(int index, Object element) 修改向量中的元素 set(int index, Object element) 删除向量中的指定元素 Object remove(int index) (返回被删元素) Boolean remove(Object element) removeRange(int i , int j) (包括i但不包括j),向量元素操作,取出向量中的指定元素 Object get(int index) 测试对象在向量中是否存在 boolean contains(Object element) 查找指定元素的位置 int indexOf(Object element) int indexOf(Object element , int fromIndex) 返回一个包含向量中所有元素的对象数组 Object toArray( ),获取向量信息,清空向量(删除所有元素) clear() 测试向量是否为空 boolean isEmpty() 当前向量元素数量 int size() 向量当前容量 int capacity(),向量例,import java.util.*; public class Test public static void main(String args) Vector v1 = new Vector(); for(int i=0;i15;i+) v1.add(new String(Integer.toString(i); System.out.println(v1.get(2); /输出:2 System.out.println(v1.contains(“3“); /输出:true System.out.println(v1.indexOf(“4“); /输出:4 v1.set(2,new String(“wang“); System.out.println(v1.get(2); /输出:wang System.out.println(v1.size(); /输出:15 System.out.println(v1.capacity(); /输出:20 System.out.println(v1.isEmpty(); /输出: false v1.clear(); System.out.println(v1.isEmpty(); /输出:true ,日期类Calendar,抽象类,在Date对象和一组整数域之间进行转换: YEAR, MONTH, DAY, HOUR, Calendar c = Calendar.getInstance(); int c.get(Calendar.YEAR) int c.get(Calendar.MONTH) ( 1月为0) int c.get(Calendar.DATE) int c.get(Calendar.HOUR) int c.get(Calendar.MINUTE) int c.get(Calendar.SECOND) c.set(Calendar.YEAR,2000) c.set(Calendar.MONTH,10) ( 11月) c.set(Calendar.DATE,7) c.set(2000,10,7),日期类Calendar例,import java.util.*; public class Test public static void main(String args) Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR) + “ 年 “ + (c.get(Calendar.MONTH)+1) + “ 月 “ + c.get(Calendar.DATE) + “ 日 “ ); System.out.println(c.get(Calendar.HOUR)+ “ 时 “ + c.get(Calendar.MINUTE)+ “ 分 “ + c.get(Calendar.SECOND)+ “ 秒 “); c.set(2008,7,8); / 2008年8月8日 System.out.println(c.get(Calendar.YEAR)+“ 年 “ + (c.get(Calendar.MONTH)+1)+“ 月 “ + c.get(Calendar.DATE)+“ 日 “ ); ,堆栈Stack,是Vector的子类 构造函数 Stack() 建立一个新的栈 方法 boolean empty() 测试栈是否空 Object peek() 查看栈顶元素 Object pop() 弹栈(出栈) Object push(Object item) 压栈(进栈) int search(Object item) 查找栈中元素,返回距栈顶位置(栈顶位置为1),堆栈例-表达式计算,#,2,*,(,3,+,5,8,16,-,4,12,操作数栈 s1 操作符栈 s2,排序算法,冒泡排序算法 基本思路:把当前数据序列中的各相邻数据两两比较,发现任何一对数据间不符合要求的升序或降序关系则立即调换它们的顺序,从而保证相邻数据间符合升序或降序的关系。 选择排序 插入排序 利用系统类实现排序 Arrays类提供了多种操作数组的方法,包括查找和排序 public static void sort(int a) /对整型数组排序 public static void sort(float a) /对浮点数数组排序 public static void sort(char a) /对字符数组进行排序,排序例,import java.util.Arrays ; public class TestSysSort public static void main ( String args ) int array_int = 4,-5,23,7,0,66,37,365,-22,4 ; /整型数组 Arrays.sort(array_int); /调用Arrays类的整型数组排序方法 for(int i=0;iarray_int.length;i+) System.out.print(array_inti + “ “); System.out.println(); char array_char = T,s,i,n,g,h,u,a ; /字符数组 Arrays.sort(array_char,2,5); /对字符组排序,只排第24个元素 for(int i=0;iarray_char.length;i+) System.out.print(array_chari + “ “); System.out.println(); /字符串数组 String array_str = “grape“,“banana“,“pear“,“apple“,“orange“ ; Arrays.sort(array_str); /调用 sort(Object) 方法对字符串数组排序 for(int i=0;iarray_str.length;i+) System.out.print(array_stri + “ “); ,查找算法,顺序查找 对半查找 利用系统类实现查找 Arrays类几个查找方法的定义: public static int binarySearch(int a,int key) public static int binarySearch(float a,float key) public static int binarySearch(Object a,Object key),查找例,import java.util.Arrays ; public class TestSysSearch public static void main ( String args) int i ; int array_int = 4,-5,23,7,0,66,37,365,-22,4 ; Arrays.sort(array_int); /调用Arrays类排序方法排序 i = Arrays.binarySearch(array_int,0); /调用Arrays类查找方法 System.out.println(“0是整型数组下标为“ + i + “的元素“); String array_str = “grape“,“banana“,“pear“,“apple“,“orange“ ; Arrays.sort(array_str); /调用Arrays类排序方法排序 i = Arrays.binarySearch(array_str,“apple“); /Arrays类查找方法 System.out.println(“apple是字符串数组下标为“ + i + “的元素“);,查找例,System.out.println(“-下面程序用于测试查找方法返回值的含义-“); char array_char = i,j,k,p,q,r,s ;/已排序 i = Arrays.binarySearch(array_char,a); System.out.println(“查找对象比最小元素还小,方法返回值是:“ + i); i = Arrays.binarySearch(array_char,j); System.out.println(“查找对象找到,j是数组下标为“ + i + “的元素“); i = Arrays.binarySearch(array_char,m); System.out.println(“查找对象不存在,但位于两个元素之间,方法返回值是:“ + i); i = Arrays.binarySearch(array_char,x); System.out.println(“查找对象比最大元素还大,方法返回值是:“ + i); ,表驱动法 Table-Driven Methods,实例:判断字符的种类,解释和评论,上例是使用复杂逻辑对字符分类,把字符划分为字母、标点符号和数字。使用的语言是JAVA 可以看出,这种比较“直观”的编程方法的逻辑判断非常的复杂。 如果功能要求做一个简单的改动,那么,就需要对代码进行改动,换一种思路解决:表驱动法,如果用一个查询表(lookup table),就可以把每个字符的类型保存在一个用字符编码的数组里。那么上述复杂的逻辑就可以替换为: charType charTypeTableinputChar; 前提条件是已经建立好了charTypeTable数组,优势很明显,,适当的使用表驱动法,生成的代码会比复杂的逻辑代码更简单、更容易修改,而且效率会更高。,表驱动法是什么?,是一种编程模式(scheme) 从表里面查找信息而不使用逻辑语句(if和else) 凡是可以通过逻辑语句来选择的事物,都可以通过查表来选择 对于简单的情况,使用逻辑语句更为容易和直白,对于复杂的逻辑链,查表法有其不可替代的优势,使用表驱动法的两个重要问题,1、怎样从表中查询条目? 直接访问(Direct access) 索引访问(Indexed access) 阶梯访问(Stair-step access) 2、在表里应该存些什么? 数据(data) 动作(action) 实现该动作的子程序的引用(例如函数指针) 其他,直接访问表(Direct access),通过查询表,直接找到目标数据 If then Else if Else if Else if Else if Else if ,如何根据月份的不同,确定每个月的天数?,大多数程序员的第一反应是如下代码( 幸亏一年只有12个月): if (month = 1) then days=31 elseif (month)=2 then days=28 elseif (month)=3 then days=31 elseif (month)=4 then days=30 elseif (month)=5 then days=31 elseif (month)=6 then days=30,elseif (month)=7 then days=31 elseif (month)=8 then days
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 散文朗读节奏课件
- 散打班知识培训方案课件
- 酒店客房服务标准及质量监督流程
- 工伤预防知识培训实训总结
- 绿色有机稻谷栽培技术规范
- 江苏省南京市东山高级中学2024-2025学年高三下学期二模模拟数学试卷(原卷版)
- 中学语文教师专业能力提升方案
- 电子制造业绿色厂房建设方案
- 项目消防安全管理操作规范
- 软件需求规格说明书模板
- 小学生课件藏文版下载
- 中试基地管理制度
- 2025至2030中国工业电机行业产业运行态势及投资规划深度研究报告
- 养老院电动车管理制度
- 2026届高考语文复习:辨析并修改病句
- 2025年区域卫生规划与医疗卫生资源优化配置的研究报告
- 养生馆转让协议书
- 南充市“十四五”现代物流产业发展规划
- 义务教育《艺术课程标准》2022年修订版(原版)
- 江苏省无锡市江阴市六校2024-2025学年高一下学期4月期中联考试题 物理 含答案
- 医保人员管理制度
评论
0/150
提交评论