java第04讲数组、字符串、向量与哈希表.ppt

上传人:max****ui 文档编号:6372004 上传时间:2020-02-24 格式:PPT 页数:77 大小:1.01MB
返回 下载 相关 举报
java第04讲数组、字符串、向量与哈希表.ppt_第1页
第1页 / 共77页
java第04讲数组、字符串、向量与哈希表.ppt_第2页
第2页 / 共77页
java第04讲数组、字符串、向量与哈希表.ppt_第3页
第3页 / 共77页
点击查看更多>>
资源描述
2020 2 24 1 第4章数组 字符串 向量与哈希表 2020 2 24 2 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 2 24 3 数组 由相同类型的若干项数据组成例如 publicstaticvoidmain Stringargs 其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度类似于动态数组的类型类Vector长度可以变大或缩小 2020 2 24 4 示例 int c newint 12 c是数组名如何获得数组的长度 c length第一个数组元素的下标为0使用数组可以通过数组名与下标每个数组元素类似于普通的变量c 0 3 c 0 5 c length 2020 2 24 5 下标 有时也称为索引必须是整数或整数表达式 例如 c 11 示例 含有运算符的下标表达式 if x 3 t c 5 2 c 3 t true 2020 2 24 6 数组声明 一维数组变量的声明格式有如下两种 1 数组元素的数据类型 变量名 2 数组元素的数据类型变量名 示例 int c String names intc Stringnames 2020 2 24 7 内存分配 Java数组实际上也是对象 所以可通过new关键字来创建示例 int c 声明c newint 12 创建对象 并分配内存声明时不必指定数组的大小上面的两个语句可以简化成一个语句int c newint 12 2020 2 24 8 初始化数组 基本数据类型的元素初始化为0值或false非基本数据类型的元素初始化为null可以采用循环结构初始化数组示例 double squares squares newdouble 100 for inti 0 i squares length i squares i i i 2020 2 24 9 通过初始化语句创建数组 Java语言允许通过数组的初始化语句创建数组示例 int n 10 20 30 40 50 上面语句创建了一个含有五个元素的数组下标值分别为0 1 2 3 4这时不需要运算符new 2020 2 24 10 System arraycopy java lang System含有一个静态的方法arraycopy 可以用来进行数组间的拷贝 publicstaticvoidarraycopy Objectsrc intsrcPos Objectdest intdestPos intlength 拷贝数组 从源数组的指定位置 拷贝提定长度的元素 到目标数组的指定位置 2020 2 24 11 实例 int src 1 2 3 4 5 6 int dest newint 12 System arraycopy src 0 dest 0 src length 2020 2 24 12 注意事项 当通过循环遍历数组时下标永远不要低于0下标永远要比数组元素个数小当数组下标出错 Java产生ArrayIndexOutOfBoundsException 2020 2 24 13 多维数组 最常用的多维数组是二维数组int a newint 3 4 二维数组可以理解成如下图示的表格 行的下标值 列的下标值 2020 2 24 14 示例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 2 24 15 示例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 2 24 16 注意事项 Java的多维数组实际上是数组的数组即创建以数组为元素的数组意味着 二维数组的每一行可以具有不同的列数示例 inta a newint 3 allocaterowsa 0 newint 3 allocaterow0a 1 newint 2 allocaterow1a length 行数a i length 第i行列数 2020 2 24 17 三维数组 思维的扩展 一维数组 二维数组 三维数组示例 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 2 24 18 注意事项 Java允许数组的维数为 三 四 或更大但是 慎用高维数组甚至三维数组在实际的应用中也比较少出现 2020 2 24 19 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 2 24 20 String的基本知识 String与C语言不同 字符 char 数组不是字符串 String String数值不必以 u0000 结束 2020 2 24 21 String直接量 String直接量双引号括起来的字符序列示例 Hello 或 您好 字符串赋值可以在声明时赋值Stringc blue c是String类型的变量 blue 是String直接量 2020 2 24 22 String构造 类String共有11个构造方法 其中两个不被赞成使用 deprecated 参见docs index html 2020 2 24 23 示例 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 2 24 24 String方法 length charAt 和getChars 方法length 返回String的长度与数组不同之处 Strings不含有length成员域方法charAt intindex 获得字符串指定位置的字符方法getChars intsrcBegin intsrcEnd char dst intdstBegin 拷贝字符串的部分字符序列 到指定的字符数组的指定位置 2020 2 24 25 字符串比较 字符串 String 比较字符类型的数据也是数值类型数据比较字符串大小 实际上就是依次比较其所包含的字符的数值大小小写字母与大小字母是不相同的 2020 2 24 26 运算符 当用于基本数据类型时 用于判别是否相等当用于引用数据类型时 用来判别引用是否指向相同的对象Java虚拟机中含有字符串池 直接量在此池内 相同内容的字符串直接量 相同的对象s1 hello 字符串直接量s2 newString hello s1 hello trues2 hello false 2020 2 24 27 实例 StringTest java publicclassStringTest publicstaticvoidmain Stringargs Stringa java usesanonymousobjectStringb java usesanonymousobjectStringx ja Stringy va Stringc x y if a b System out println aandbpointtothesameobject elseSystem out println aandbdonotpointtothesameobject if a c System out println aandcpointtothesameobject elseSystem out println aandcdonotpointtothesameobject Endofmethod main Endofclass StringTest 2020 2 24 28 程序输出 aandbpointtothesameobjectaandcdonotpointtothesameobject 2020 2 24 29 字符串 String 比较方法 booleanequals ObjectanObject 比较当前的字符串与指定的对象比较结果为真 当且仅当给定的参数不为空 并且具有完全相同的字符序列例如 s1 equals Hi booleanequalsIgnoreCase StringanotherString 判别相等 但不区分大小写例如 在不区分大小写情况下 hello 与 HELLO 相等 2020 2 24 30 字符串 String 比较方法 intcompareTo StringanotherString 比较两个字符串的内容返回 0 如果字符串内容完全相同小于0的值 如果在比较第一个不相同字符 当前字符串的字符的值小于anotherString对应的字符的值大于0的值 如果在比较第一个不相同字符 当前字符串的字符的值大于anotherString对应的字符的值intcompareToIgnoreCase Stringstr 比较两个字符串的内容 但不区分大小写 2020 2 24 31 查找字符串中的字符或子串 查找字符串 String 中的字符或子串方法indexOf四种重载方法indexOf返回第一次找到的时下标如果没有找到 则返回 1示例 Stringname CoolTools System out println name indexOf oo 2020 2 24 32 查找字符串中的字符或子串 方法lastIndexOfpublicintlastIndexOf intch intfromIndex 从指定位置往回查找 返回找到的最大的字符下标位置即返回满足下面条件的最大值 this charAt k ch k fromIndex 返回 1 如果当前字符串不含该字符 2020 2 24 33 从当前字符串中抽取子字符串 方法substringsubstring intbeginIndex 返回新的字符串 当前字符串的子串该子串从指定的位置开始 并一直到当前字符串结束为止substring intbeginIndex intendIndex 返回新的字符串 当前字符串的子串该子串从指定的位置 beginIndex 开始 到指定的位置 endIndex 1 结束 2020 2 24 34 实例 unhappy substring 2 返回 Harbison substring 3 返回 emptiness substring 9 返回 emptiness substring 10 返回 hamburger substring 4 8 返回 smiles substring 1 5 返回 happy bison 空串 StringIndexOutOfBoundsException urge mile 2020 2 24 35 字符串 String 拼接 方法concat拼接两个字符串 并返回一个新字符串源字符串不会被修改s1 concat s2 返回字符串s1和s2拼接的结果示例 Strings1 ABC Strings2 XYZ s1 s1 concat s2 s1 s1 s2 2020 2 24 36 类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 2 24 37 其它String方法 其它String方法s1 replace char1 char2 返回一个新的字符串 它是将s1中的所有char1替换成的结果char2源字符串没有发生变化如果s1不含char1 则返回源字符串的引用 即s1示例 mesquiteinyourcellar replace e o 结果返回 mosquitoinyourcollar JonL replace q x 结果返回 JonL 没有发生变化 2020 2 24 38 其它String方法 s1 toUpperCase返回对应的新字符串 各个字母都是大写的如果没有字符被修改 则返回源字符串的引用类似方法s1 toLowerCase练习 请试着分析方法toUpperCase是如何实现的 2020 2 24 39 其它String方法 s1 trim 返回新字符串 源字符串最前面和最后面的的空白符如果字符串没有被改变 则返回源字符串的引用s1 toString 由于s1本身就是字符串了 所以返回s1本身其它引用类型也可以通过方法toString 生成相应的字符串s1 toCharArray 将字符串转换成字符数组 2020 2 24 40 其它String方法 方法intern返回具有相同内容的字符串的引用如果字符串池含有该内容的字符串 则返回字符串池中具有该内容的字符串的引用如果字符串池没有字符串的内容与其相同 则在字符串池中创建具有该内容的字符串 再返回新创建的字符串的引用字符串池组成 字符串直接量以及由方法intern产生的字符串字符串池中的字符串s与t s与t具有相同内容 s equals t 当且仅当指向s与t的同一个字符串 s intern t intern 可以采用这个机制加速字符串是否相等的判定 2020 2 24 41 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 2 24 42 类StringBuffer 类String字符串 String 对象一旦创建 其内容不能再被修改 read only 类StringBufferStringBuffer对象的内容是可以被修改的除了字符的长度之外 还有容量的概念通过动态改变容量的大小 加速字符管理 2020 2 24 43 三种StringBuffer构造方法 buf1 newStringBuffer 创建空的StringBuffer对象 容量为16字符buf2 newStringBuffer capacity 创建空的StringBuffer对象 指定容量大小buf3 newStringBuffer myString 创建含有相应字符序列的StringBuffer对象 容量为myString length 16示例 StringBufferb newStringBuffer hello 2020 2 24 44 String和StringBuffer String和StringBuffer是两种不同的类不能用字符串 String 的示例对象调用类 StringBuffer 的成员方法反之亦然String StringBuffer构造方法StringBuffer String构造方法方法toString 2020 2 24 45 StringBuffer方法 方法length 返回StringBuffer的长度方法capacity 返回StringBuffer的容量方法setLength intnewLength 增加或减小StringBuffer的长度 2020 2 24 46 方法ensureCapacity intminimumCapacity 参见在线帮且文档阅读方法ensureCapacity的切确含义确保StringBuffer对象的容量至少为指定的大小如果当前容量比指定值 minimumCapacity 小 则重新分配内存新容量大小为如下的值中较大者 参数minimumCapacity的值 两倍的旧容量 再加上2 如果minimumCapacity的值比已有容量小 则不做任何操作 直接返回 2020 2 24 47 实例 StringBufferCapLen java 1 Fig 10 13 StringBufferCapLen java2 Thisprogramdemonstratesthelengthand3 capacitymethodsoftheStringBufferclass 45 Javaextensionpackages6importjavax swing 78publicclassStringBufferCapLen 910 testStringBuffermethodsforcapacityandlength11publicstaticvoidmain Stringargs 12 13StringBufferbuffer 14newStringBuffer Hello howareyou 1516Stringoutput buffer buffer toString 17 nlength buffer length 18 ncapacity buffer capacity 1920buffer ensureCapacity 69 21output n nNewcapacity buffer capacity 2223buffer setLength 10 24output n nNewlength buffer length 25 nbuf buffer toString 2627JOptionPane showMessageDialog null output 28 StringBufferlengthandcapacityMethods 29JOptionPane INFORMATION MESSAGE 3031System exit 0 32 3334 endclassStringBufferCapLen 2020 2 24 48 程序输出 2020 2 24 49 处理StringBuffer内字符的方法 方法charAt intindex 返回StringBuffer对象中指定位置的字符方法setCharAt intindex charch 设置StringBuffer对象中指定位置的字符方法getChars intsrcBegin intsrcEnd char dst intdstBegin 将StringBuffer对象中指定的字符子序列 拷贝到指定的字符数组 dst 方法reverse 将StringBuffer对象中的字符序列按逆序方式排列 2020 2 24 50 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 2 24 51 insert和delete方法 方法insert允许将各种数据插到StringBuffer对象的指定位置方法delete intstart intend 和deleteCharAt intindex 允许删除StringBuffer对象中的指定字符 2020 2 24 52 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 2 24 53 向量 向量所对应的类是类java util Vector向量变量的声明格式Vector变量名 示例Vectorvs 2020 2 24 54 创建向量实例对象 Vectorvs newVector Vectorvo newVector 2020 2 24 55 增加元素 publicbooleanadd Eo publicvoidaddElement Eobj 示例vs add Tom 2020 2 24 56 修改元素 publicEset intindex Eelement publicvoidsetElementAt Eobj intindex 2020 2 24 57 删除元素 publicvoidclear publicvoidremoveAllElements publicEremove intindex publicvoidremoveElementAt intindex 2020 2 24 58 通过迭代器 iterator 获取向量对象的各个元素 类java util Vector的成员方法publicIteratoriterator 接口java util Iterator的成员方法booleanhasNext 接口java util Iterator的成员方法Enext 2020 2 24 59 本章总体纲要 数组字符串字符串缓冲区向量哈希表 2020 2 24 60 哈希函数或散列函数 示例h1 s s 0 31 n 1 s 1 31 n 2 s n 1 哈希码 hashcode 或散列索引由哈希函数计算出来的数值 2020 2 24 61 哈希表的空间利用率 哈希表的容量 capacity 哈希表的存储空间大小哈希表的装填因子 2020 2 24 62 哈希表类 java util Hashtablejava util HashMapjava util WeakHashMap 2020 2 24 63 示例 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 2 24 64 示例 往哈希表中添加元素 并使得关键字与值之间建立起映射关系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结束 2020 2 24 65 编译 运行 输出 2020 2 24 66 作业 教材习题4 5 2020 2 24 67 本课件使用要求 使用本课件 必须注明引用 具体见下一个幻灯片 书及课件均可能出现一些错误和缺陷 恳切希望广大读者特别是讲授此课程的老师批评指正 2020 2 24 68 引用声明 本课件来源于 或参考了 下面的书及其课件 雍俊海 Java程序设计教程 北京 清华大学出版社 2007 2020 2 24 69 免责声明 请合法使用课件 其用途应当合法有益而且不应对任何人造成任何伤害或损失同时请注意教材作者及出版社没有对本课件作出任何承诺与保证 2020 2 24 70 参考文献 本课件的参考文献与下面书的参考文献相同雍俊海 Java程序设计教程 北京 清华大学出版社 2007 雍俊海 Java程序设计习题集 含参考答案 北京 清华大学出版社 2006 雍俊海 Java程序设计 北京 清华大学出版社 2004 2020 2 24 71 雍俊海编写过的教材和教参 雍俊海 计算机动画算法与编程基础 北京 清华大学出版社 2008 雍俊海 Java程序设计 北京 清华大学出版社 2008 雍俊海 Java程序设计教程 第2版 北京 清华大学出版社 2007 雍俊海 Java程序设计习题集 含参考答案 北京 清华大学出版社 2006 雍俊海 Java程序设计 北京 清华大学出版社 2004 2020 2 24 72 雍俊海编写过的教材和教参 雍俊海 计算机动画算法与编程基础 北京 清华大学出版社 2008 2020 2 24 73 雍俊海编写过的教材和教参 雍俊海 Java程序设计 北京 清华大学出版社 2008 2020 2 24 74 雍俊海编写过的教材和教参 雍俊海 Java程序设计教程 清华大学出版社 2007 普通高等教育精品教材 普通高等教育 十一五 国家级规划教材 2020 2 24 75 雍俊海编写过的教材和教参 雍俊海 Java程序设计习题集 含参考答案 清华大学出版社 2006 2020 2 24 76 雍俊海编写过的教材和教参 雍俊海 JAVA程序设计 北京 清华大学出版社 2004 2020 2 24 77 谢谢 请多指教
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!