




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/11/19,1,第4章数组、字符串、向量与哈希表,2019/11/19,2,本章总体纲要,数组字符串字符串缓冲区向量哈希表,2019/11/19,3,数组,由相同类型的若干项数据组成例如:publicstaticvoidmain(Stringargs)其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度类似于动态数组的类型类Vector长度可以变大或缩小,2019/11/19,4,示例,intc=newint12;c是数组名如何获得数组的长度?c.length第一个数组元素的下标为0使用数组可以通过数组名与下标每个数组元素类似于普通的变量c0=3;c0+=5;,c.length,2019/11/19,5,下标,有时也称为索引必须是整数或整数表达式,例如:c11示例:含有运算符的下标表达式:if(x=3)t=(c5-2=c3)/t=true,2019/11/19,6,数组声明,一维数组变量的声明格式有如下两种:(1)数组元素的数据类型变量名;(2)数组元素的数据类型变量名;示例:intc;Stringnames;intc;Stringnames;,2019/11/19,7,内存分配,Java数组实际上也是对象,所以可通过new关键字来创建示例:intc;/声明c=newint12;/创建对象,并分配内存声明时不必指定数组的大小上面的两个语句可以简化成一个语句intc=newint12;,2019/11/19,8,初始化数组,基本数据类型的元素初始化为0值或false非基本数据类型的元素初始化为null可以采用循环结构初始化数组示例:doublesquares;squares=newdouble100;for(inti=0;isquares.length;i+)squaresi=i*i;,2019/11/19,9,通过初始化语句创建数组,Java语言允许通过数组的初始化语句创建数组示例:intn=10,20,30,40,50;上面语句创建了一个含有五个元素的数组下标值分别为0,1,2,3,4这时不需要运算符new,2019/11/19,10,System.arraycopy(),java.lang.System含有一个静态的方法arraycopy():可以用来进行数组间的拷贝:publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength);拷贝数组:从源数组的指定位置拷贝提定长度的元素到目标数组的指定位置,2019/11/19,11,实例,intsrc=1,2,3,4,5,6;intdest=newint12;System.arraycopy(src,0,dest,0,src.length);,2019/11/19,12,注意事项,当通过循环遍历数组时下标永远不要低于0下标永远要比数组元素个数小当数组下标出错,Java产生ArrayIndexOutOfBoundsException,2019/11/19,13,多维数组,最常用的多维数组是二维数组inta=newint34;二维数组可以理解成如下图示的表格,行的下标值,列的下标值,2019/11/19,14,示例1,类似于一维数组进行二维数组的声明、创建(内存分配)与初始化示例:classJ_FillArraypublicstaticvoidmain(Stringargs)intmatrix=newint45;for(introw=0;row4;row+)for(intcol=0;col5;col+)matrixrowcol=row+col;/内部for循环结束/外部for循环结束/方法main结束/类J_FillArray结束,2019/11/19,15,示例2,通过初始化语句创建数组示例:doublec=1.0,2.0,3.0,4.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0;,2019/11/19,16,注意事项,Java的多维数组实际上是数组的数组即创建以数组为元素的数组意味着:二维数组的每一行可以具有不同的列数示例:inta;a=newint3;/allocaterowsa0=newint3;/allocaterow0a1=newint2;/allocaterow1a.length行数ai.length第i行列数,2019/11/19,17,三维数组,思维的扩展:一维数组二维数组三维数组示例:classJ_Fill3DArraypublicstaticvoidmain(Stringargs)intM=newint453;for(introw=0;row4;row+)for(intcol=0;col5;col+)for(intver=0;ver3;ver+)Mrowcolver=row+col+ver;/内部for循环结束/for循环结束/外部for循环结束/方法main结束/类J_Fill3DArray结束,2019/11/19,18,注意事项,Java允许数组的维数为:三、四、或更大但是,慎用高维数组甚至三维数组在实际的应用中也比较少出现,2019/11/19,19,本章总体纲要,数组字符串字符串缓冲区向量哈希表,2019/11/19,20,String的基本知识,String与C语言不同:字符(char)数组不是字符串(String)String数值不必以u0000结束,2019/11/19,21,String直接量,String直接量双引号括起来的字符序列示例:“Hello”或“您好字符串赋值可以在声明时赋值Stringc=blue;c是String类型的变量blue是String直接量,2019/11/19,22,String构造,类String共有11个构造方法,其中两个不被赞成使用(deprecated)参见docsindex.html,2019/11/19,23,示例,/J_StringConstructors.java;开发者:雍俊海/字符串构造方法例程publicclassJ_StringConstructorspublicstaticvoidmain(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结束,2019/11/19,24,String方法:length(),charAt()和getChars(),方法length()返回String的长度与数组不同之处:Strings不含有length成员域方法charAt(intindex)获得字符串指定位置的字符方法getChars(intsrcBegin,intsrcEnd,chardst,intdstBegin)拷贝字符串的部分字符序列到指定的字符数组的指定位置,2019/11/19,25,字符串比较,字符串(String)比较字符类型的数据也是数值类型数据比较字符串大小,实际上就是依次比较其所包含的字符的数值大小小写字母与大小字母是不相同的,2019/11/19,26,=运算符,当用于基本数据类型时,用于判别是否相等当用于引用数据类型时,用来判别引用是否指向相同的对象Java虚拟机中含有字符串池(直接量在此池内),相同内容的字符串直接量相同的对象s1=“hello”;/字符串直接量s2=newString(hello);s1=hello;/trues2=hello;/false,2019/11/19,27,实例:StringTest.java,publicclassStringTestpublicstaticvoidmain(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,2019/11/19,28,程序输出,aandbpointtothesameobjectaandcdonotpointtothesameobject,2019/11/19,29,字符串(String)比较方法,booleanequals(ObjectanObject)比较当前的字符串与指定的对象比较结果为真当且仅当给定的参数不为空,并且具有完全相同的字符序列例如:s1.equals(Hi);booleanequalsIgnoreCase(StringanotherString)判别相等,但不区分大小写例如:在不区分大小写情况下,“hello”与“HELLO”相等,2019/11/19,30,字符串(String)比较方法,intcompareTo(StringanotherString)比较两个字符串的内容返回:0:如果字符串内容完全相同小于0的值:如果在比较第一个不相同字符,当前字符串的字符的值小于anotherString对应的字符的值大于0的值:如果在比较第一个不相同字符,当前字符串的字符的值大于anotherString对应的字符的值intcompareToIgnoreCase(Stringstr)比较两个字符串的内容,但不区分大小写,2019/11/19,31,查找字符串中的字符或子串,查找字符串(String)中的字符或子串方法indexOf四种重载方法indexOf返回第一次找到的时下标如果没有找到,则返回-1示例:Stringname=CoolTools;System.out.println(name.indexOf(oo);,2019/11/19,32,查找字符串中的字符或子串,方法lastIndexOfpublicintlastIndexOf(intch,intfromIndex)从指定位置往回查找,返回找到的最大的字符下标位置即返回满足下面条件的最大值:(this.charAt(k)=ch)c-)dest.append(source.charAt(c);returndest.toString();,2019/11/19,51,insert和delete方法,方法insert允许将各种数据插到StringBuffer对象的指定位置方法delete(intstart,intend)和deleteCharAt(intindex)允许删除StringBuffer对象中的指定字符,2019/11/19,52,本章总体纲要,数组字符串字符串缓冲区向量哈希表,2019/11/19,53,向量,向量所对应的类是类java.util.Vector向量变量的声明格式Vector变量名;示例Vectorvs;,2019/11/19,54,创建向量实例对象,Vectorvs=newVector();Vectorvo=newVector();,2019/11/19,55,增加元素,publicbooleanadd(Eo)publicvoidaddElement(Eobj)示例vs.add(Tom);,2019/11/19,56,修改元素,publicEset(intindex,Eelement)publicvoidsetElementAt(Eobj,intindex),2019/11/19,57,删除元素,publicvoidclear()publicvoidremoveAllElements()publicEremove(intindex)publicvoidremoveElementAt(intindex),2019/11/19,58,通过迭代器(iterator)获取向量对象的各个元素,类java.util.Vector的成员方法publicIteratoriterator()接口java.util.Iterator的成员方法booleanhasNext()接口java.util.Iterator的成员方法Enext(),2019/11/19,59,本章总体纲要,数组字符串字符串缓冲区向量哈希表,2019/11/19,60,哈希函数或散列函数,示例h1(s)=s0*31(n-1)+s1*31(n-2)+.+sn-1哈希码(hashcode)或散列索引由哈希函数计算出来的数值,2019/11/19,61,哈希表的空间利用率,哈希表的容量(capacity)哈希表的存储空间大小哈希表的装填因子,2019/11/19,62,哈希表类,java.util.Hashtablejava.util.HashMapjava.util.WeakHashMap,2019/11/19,63,示例,/J_Hashtable.java;开发者:雍俊海/通过哈希表形成数组下标与值之间的双向映射。importjava.util.Hashtable;publicclassJ_Hashtablepublicstaticvoidmain(Stringargs)Stringsa=Mary,Tom,John,James,Louis,Jim,Rose,Ann,Liza,Betty,Henry,Albert;Hashtableht=newHashtable();,2019/11/19,64,示例,/往哈希表中添加元素,并使得关键字与值之间建立起映射关系inti;for(i=0;isa.length;i+)ht.put(sai,newInteger(i);/通过下标获得姓名(字符串值)i=8;System.out.println(在sa数组中,下标为+i+的字符串是+sai+);/通过哈希表,直接获得姓名(字符串值)的数组下标Strings=sai;System.out.println(在sa数组中,+s+的下标是+ht.get(s);/方法main结束/类J_Hashtable结束,2019/11/19,65,编译,运行&输出,2019/11/19,66,作业,教材习题4.5,2019/11/19,67,本课件使用要求,使用本课件,必须注明引用(具体见下一个幻灯片)书及课件均可能出现一些错误和缺陷,恳切希望广大读者特别是讲授此课程的老师批评指正,2019/11/19,68,引用声明,本课件来源于(或参考了)下面的书及其课件:雍俊海.Java程序设计教程.北京:清华大学出版社,2007.,2019/11/19,69,免责声明,请合法使用课件,其用途应当合法有益而且不应对任何人造成任何伤害
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息技术概念方案
- 我心中的医学人文精神
- 脑转移瘤综合治疗策略
- 浙江省杭州市江南实验学校2026届化学高二上期中联考模拟试题含解析
- 校级交流活动组织与实施框架
- 药品采购知识培训
- 舞蹈课成果汇报
- 药品半年销售总结
- 同济医院心肺康复指南
- 挑战第一天讲解
- 市政工程占道施工方案
- GB/T 39965-2021节能量前评估计算方法
- GB/T 17449-1998包装玻璃容器螺纹瓶口尺寸
- GB/T 12243-2021弹簧直接载荷式安全阀
- GB/T 10066.4-2004电热设备的试验方法第4部分:间接电阻炉
- PMC知识培训课件
- CJJ82-2019-园林绿化工程施工及验收规范
- 个人信息(模板)
- 会计师事务所验资工作底稿模板
- 婚育情况登记表
- (完整版)水电工安全技术交底
评论
0/150
提交评论