




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 1 1 1 Java程序设计ProgramminginJava 雍俊海清华大学软件学院SchoolofSoftware TsinghuaUniversityyongjunhai 2020 1 1 2 教材 雍俊海 Java程序设计教程 北京 清华大学出版社 2007 2020 1 1 3 习题集 雍俊海 Java程序设计习题集 含参考答案 北京 清华大学出版社 2006 2020 1 1 4 参考文献 本课件的参考文献与下面书的参考文献相同雍俊海 Java程序设计教程 北京 清华大学出版社 2007 雍俊海 Java程序设计习题集 含参考答案 北京 清华大学出版社 2006 雍俊海 Java程序设计 北京 清华大学出版社 2004 2020 1 1 5 第4章数组 字符串 向量与哈希表 雍俊海 Jun HaiYong 清华大学软件学院SchoolofSoftware TsinghuaUniversity 2020 1 1 6 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 1 1 7 数组 由相同类型的若干项数据组成例如 publicstaticvoidmain Stringargs 其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度类似于动态数组的类型类Vector长度可以变大或缩小 2020 1 1 8 示例 int c newint 12 c是数组名如何获得数组的长度 c length第一个数组元素的下标为0使用数组可以通过数组名与下标每个数组元素类似于普通的变量c 0 3 c 0 5 c length 2020 1 1 9 下标 有时也称为索引必须是整数或整数表达式 例如 c 11 示例 含有运算符的下标表达式 if x 3 t c 5 2 c 3 t true 2020 1 1 10 数组声明 一维数组变量的声明格式有如下两种 1 数组元素的数据类型 变量名 2 数组元素的数据类型变量名 示例 int c String names intc Stringnames 2020 1 1 11 内存分配 Java数组实际上也是对象 所以可通过new关键字来创建示例 int c 声明c newint 12 创建对象 并分配内存声明时不必指定数组的大小上面的两个语句可以简化成一个语句int c newint 12 2020 1 1 12 初始化数组 基本数据类型的元素初始化为0值或false非基本数据类型的元素初始化为null可以采用循环结构初始化数组示例 double squares squares newdouble 100 for inti 0 i squares length i squares i i i 2020 1 1 13 通过初始化语句创建数组 Java语言允许通过数组的初始化语句创建数组示例 int n 10 20 30 40 50 上面语句创建了一个含有五个元素的数组下标值分别为0 1 2 3 4这时不需要运算符new 2020 1 1 14 注意事项 当通过循环遍历数组时下标永远不要低于0下标永远要比数组元素个数小当数组下标出错 Java产生ArrayIndexOutOfBoundsException 2020 1 1 15 多维数组 最常用的多维数组是二维数组int a newint 3 4 二维数组可以理解成如下图示的表格 行的下标值 列的下标值 2020 1 1 16 示例1 类似于一维数组进行二维数组的声明 创建 内存分配 与初始化示例 classJ FillArray publicstaticvoidmain Stringargs int matrix newint 4 5 for introw 0 row 4 row for intcol 0 col 5 col matrix row col row col 内部for循环结束 外部for循环结束 方法main结束 类J FillArray结束 2020 1 1 17 示例2 通过初始化语句创建数组示例 double c 1 0 2 0 3 0 4 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 2020 1 1 18 注意事项 Java的多维数组实际上是数组的数组即创建以数组为元素的数组意味着 二维数组的每一行可以具有不同的列数示例 inta a newint 3 allocaterowsa 0 newint 3 allocaterow0a 1 newint 2 allocaterow1a length 行数a i length 第i行列数 2020 1 1 19 三维数组 思维的扩展 一维数组 二维数组 三维数组示例 classJ Fill3DArray publicstaticvoidmain Stringargs int M newint 4 5 3 for introw 0 row 4 row for intcol 0 col 5 col for intver 0 ver 3 ver M row col ver row col ver 内部for循环结束 for循环结束 外部for循环结束 方法main结束 类J Fill3DArray结束 2020 1 1 20 注意事项 Java允许数组的维数为 三 四 或更大但是 慎用高维数组甚至三维数组在实际的应用中也比较少出现 2020 1 1 21 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 1 1 22 String的基本知识 String与C语言不同 字符 char 数组不是字符串 String String数值不必以 u0000 结束 2020 1 1 23 String直接量 String直接量双引号括起来的字符序列示例 Hello 或 您好 字符串赋值可以在声明时赋值Stringc blue c是String类型的变量 blue 是String直接量 2020 1 1 24 String构造 类String共有11个构造方法 其中两个不被赞成使用 deprecated 参见docs index html 2020 1 1 25 示例 J StringConstructors java 开发者 雍俊海 字符串构造方法例程publicclassJ StringConstructors publicstaticvoidmain Stringargs Strings1 null Strings2 newString Strings3 您好 Strings4 newString s3 System out println s1 s1 System out println s2 s2 System out println s3 s3 System out println s4 s4 方法main结束 类J StringConstructors结束 2020 1 1 26 String方法 length charAt 和getChars 方法length 返回String的长度与数组不同之处 Strings不含有length成员域方法charAt intindex 获得字符串指定位置的字符方法getChars intsrcBegin intsrcEnd char dst intdstBegin 拷贝字符串的部分字符序列 到指定的字符数组的指定位置 2020 1 1 27 字符串比较 字符串 String 比较字符类型的数据也是数值类型数据比较字符串大小 实际上就是依次比较其所包含的字符的数值大小小写字母与大小字母是不相同的 2020 1 1 28 运算符 当用于基本数据类型时 用于判别是否相等当用于引用数据类型时 用来判别引用是否指向相同的对象Java虚拟机中含有字符串池 直接量在此池内 相同内容的字符串直接量 相同的对象s1 hello 字符串直接量s2 newString hello s1 hello trues2 hello false 2020 1 1 29 字符串 String 比较方法 booleanequals ObjectanObject 比较当前的字符串与指定的对象比较结果为真 当且仅当给定的参数不为空 并且具有完全相同的字符序列例如 s1 equals Hi booleanequalsIgnoreCase StringanotherString 判别相等 但不区分大小写例如 在不区分大小写情况下 hello 与 HELLO 相等 2020 1 1 30 字符串 String 比较方法 intcompareTo StringanotherString 比较两个字符串的内容返回 0 如果字符串内容完全相同小于0的值 如果在比较第一个不相同字符 当前字符串的字符的值小于anotherString对应的字符的值大于0的值 如果在比较第一个不相同字符 当前字符串的字符的值大于anotherString对应的字符的值intcompareToIgnoreCase Stringstr 比较两个字符串的内容 但不区分大小写 2020 1 1 31 查找字符串中的字符或子串 查找字符串 String 中的字符或子串方法indexOf四种重载方法indexOf返回第一次找到的时下标如果没有找到 则返回 1示例 Stringname CoolTools System out println name indexOf oo 2020 1 1 32 查找字符串中的字符或子串 方法lastIndexOfpublicintlastIndexOf intch intfromIndex 从指定位置往回查找 返回找到的最大的字符下标位置即返回满足下面条件的最大值 this charAt k ch k fromIndex 返回 1 如果当前字符串不含该字符 2020 1 1 33 从当前字符串中抽取子字符串 方法substringsubstring intbeginIndex 返回新的字符串 当前字符串的子串该子串从指定的位置开始 并一直到当前字符串结束为止substring intbeginIndex intendIndex 返回新的字符串 当前字符串的子串该子串从指定的位置 beginIndex 开始 到指定的位置 endIndex 1 结束 2020 1 1 34 字符串 String 拼接 方法concat拼接两个字符串 并返回一个新字符串源字符串不会被修改s1 concat s2 返回字符串s1和s2拼接的结果示例 Strings1 ABC Strings2 XYZ s1 s1 concat s2 s1 s1 s2 2020 1 1 35 类String的成员方法valueOf 静态 static 成员方法valueOf将参数的值转化成相应的字符串valueOf char data returnnewString data valueOf char data intoffset intcount returnnewString data offset count 其它valueOf方法的参数的类型 boolean char int long float double和Object对象还可以通过方法toString转化成字符串 2020 1 1 36 其它String方法 其它String方法s1 replace char1 char2 返回一个新的字符串 它是将s1中的所有char1替换成的结果char2源字符串没有发生变化如果s1不含char1 则返回源字符串的引用 即s1示例 mesquiteinyourcellar replace e o 结果返回 mosquitoinyourcollar JonL replace q x 结果返回 JonL 没有发生变化 2020 1 1 37 其它String方法 s1 toUpperCase返回对应的新字符串 各个字母都是大写的如果没有字符被修改 则返回源字符串的引用类似方法s1 toLowerCase练习 请试着分析方法toUpperCase是如何实现的 2020 1 1 38 其它String方法 s1 trim 返回新字符串 源字符串最前面和最后面的的空白符如果字符串没有被改变 则返回源字符串的引用s1 toString 由于s1本身就是字符串了 所以返回s1本身其它引用类型也可以通过方法toString 生成相应的字符串s1 toCharArray 将字符串转换成字符数组 2020 1 1 39 其它String方法 方法intern返回具有相同内容的字符串的引用如果字符串池含有该内容的字符串 则返回字符串池中具有该内容的字符串的引用如果字符串池没有字符串的内容与其相同 则在字符串池中创建具有该内容的字符串 再返回新创建的字符串的引用字符串池组成 字符串直接量以及由方法intern产生的字符串字符串池中的字符串s与t s与t具有相同内容 s equals t 当且仅当指向s与t的同一个字符串 s intern t intern 可以采用这个机制加速字符串是否相等的判定 2020 1 1 40 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 1 1 41 类StringBuffer 类String字符串 String 对象一旦创建 其内容不能再被修改 read only 类StringBufferStringBuffer对象的内容是可以被修改的除了字符的长度之外 还有容量的概念通过动态改变容量的大小 加速字符管理 2020 1 1 42 三种StringBuffer构造方法 buf1 newStringBuffer 创建空的StringBuffer对象 容量为16字符buf2 newStringBuffer capacity 创建空的StringBuffer对象 指定容量大小buf3 newStringBuffer myString 创建含有相应字符序列的StringBuffer对象 容量为myString length 16示例 StringBufferb newStringBuffer hello 2020 1 1 43 String和StringBuffer String和StringBuffer是两种不同的类不能用字符串 String 的示例对象调用类 StringBuffer 的成员方法反之亦然String StringBuffer构造方法StringBuffer String构造方法方法toString 2020 1 1 44 StringBuffer方法 方法length 返回StringBuffer的长度方法capacity 返回StringBuffer的容量方法setLength intnewLength 增加或减小StringBuffer的长度 2020 1 1 45 方法ensureCapacity intminimumCapacity 参见在线帮且文档阅读方法ensureCapacity的切确含义确保StringBuffer对象的容量至少为指定的大小如果当前容量比指定值 minimumCapacity 小 则重新分配内存新容量大小为如下的值中较大者 参数minimumCapacity的值 两倍的旧容量 再加上2 如果minimumCapacity的值比已有容量小 则不做任何操作 直接返回 2020 1 1 46 处理StringBuffer内字符的方法 方法charAt intindex 返回StringBuffer对象中指定位置的字符方法setCharAt intindex charch 设置StringBuffer对象中指定位置的字符方法getChars intsrcBegin intsrcEnd char dst intdstBegin 将StringBuffer对象中指定的字符子序列 拷贝到指定的字符数组 dst 方法reverse 将StringBuffer对象中的字符序列按逆序方式排列 2020 1 1 47 11种append方法 允许数值类型的值添加到StringBuffer对象中示例 publicStringreverseIt Stringsource intc len source length StringBufferdest newStringBuffer len for c len 1 c 0 c dest append source charAt c returndest toString 2020 1 1 48 insert和delete方法 方法insert允许将各种数据插到StringBuffer对象的指定位置方法delete intstart intend 和deleteCharAt intindex 允许删除StringBuffer对象中的指定字符 2020 1 1 49 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 1 1 50 向量 向量所对应的类是类java util Vector向量变量的声明格式Vector变量名 示例Vectorvs 2020 1 1 51 创建向量实例对象 Vectorvs newVector Vectorvo newVector 2020 1 1 52 增加元素 publicbooleanadd Eo publicvoidaddElement Eobj 示例vs add Tom 2020 1 1 53 修改元素 publicEset intindex Eelement publicvoidsetElementAt Eobj intindex 2020 1 1 54 删除元素 publicvoidclear publicvoidremoveAllElements publicEremove intindex publicvoidremoveElementAt intindex 2020 1 1 55 通过迭代器 iterator 获取向量对象的各个元素 类java util Vector的成员方法publicIteratoriterator 接口java util Iterator的成员方法booleanhasNext 接口java util Iterator的成员方法Enext 2020 1 1 56 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 1 1 57 哈希函数或散列函数 示例h1 s s 0 31 n 1 s 1 31 n 2 s n 1 哈希码 hashcode 或散列索引由哈希函数计算出来的数值 2020 1 1 58 哈希表的空间利用率 哈希表的容量 capacity 哈希表的存储空间大小哈希表的装填因子 2020 1 1 59 哈希表类 java util Hashtablejava util HashMapjava util WeakHashMap 2020 1 1 60 示例 J Hashtable java 开发者 雍俊海 通过哈希表形成数组下标与值之间的双向映射 importjava util Hashtable publicclassJ Hashtable publicstaticvoidmain Stringargs String sa Mary Tom John James Louis Jim Rose Ann Liza Betty Henry Albert Hashtableht newHashtable 2020 1 1 61 示例 往哈希表中添加元素 并使得关键字与值之间建立起映射关系inti for i 0 i sa length i ht put sa i newInteger i 通过下标获得姓名 字符串值 i 8 System out println 在sa数组中 下标为 i 的字符串是 sa i 通过哈希表 直接获得姓名 字符串值 的数组下标Strings sa i System out println 在sa数组中 s 的下标是 ht get s 方法main结束 类J Hashtable
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业药店员工劳动合同与药品销售渠道拓展服务协议
- 生物质化工产品生产工作业指导书
- 干酪素点制工三级安全教育(车间级)考核试卷及答案
- 军事基地食堂建设项目砖料运输与施工保密合同
- 互联网教育项目股权转让与在线教育平台合作合同
- 生物质能源项目工程技术服务与碳排放管理合同
- 2025年宠物钙粉行业研究报告及未来行业发展趋势预测
- 镁电解工培训考核试卷及答案
- 2025年智慧物流园区智能化解决方案报告
- 医疗AI监管法规探讨-洞察及研究
- GB/T 39130-2020镀锌产品锌层附着性试验方法
- GB/T 17193-1997电气安装用超重荷型刚性钢导管
- GB/T 1455-2022夹层结构或芯子剪切性能试验方法
- 《C++程序设计教程》PPT Chapter-5
- 关于介绍足球的英语课件
- 风电发电机组电控系统知识-安全链部分课件
- PMBOK指南第6版中文版
- 第五章-针织服装设计与样板制作经典版课件
- 肿瘤的介入治疗课件最新版
- 基坑土石方开挖安全专项施工方案
- 社会统计学-全套课件
评论
0/150
提交评论