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

上传人:wuy****n92 文档编号:70799359 上传时间:2023-01-28 格式:PPT 页数:77 大小:544.50KB
返回 下载 相关 举报
java第04讲数组、字符串、向量与哈希表.ppt_第1页
第1页 / 共77页
java第04讲数组、字符串、向量与哈希表.ppt_第2页
第2页 / 共77页
点击查看更多>>
资源描述

《java第04讲数组、字符串、向量与哈希表.ppt》由会员分享,可在线阅读,更多相关《java第04讲数组、字符串、向量与哈希表.ppt(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2023/1/281第第4章章 数组、字符串、向量与哈希表数组、字符串、向量与哈希表2023/1/282本章总体纲要本章总体纲要数组数组字符串字符串字符串缓冲区字符串缓冲区向量向量哈希表哈希表2023/1/283数组数组由相同类型的若干项数据组成由相同类型的若干项数据组成例如例如:public static void main(String args)其中其中args是是String类型的数组类型的数组占用连续的内存地址占用连续的内存地址数组的静态性数组的静态性一旦创建就不能修改数组的长度一旦创建就不能修改数组的长度类似于动态数组的类型类似于动态数组的类型类类Vector长度可以变大或缩小长度

2、可以变大或缩小2023/1/284示例示例int c=new int12;c 是数组名是数组名如何获得数组的长度如何获得数组的长度?c.length第一个数组元素的下标为第一个数组元素的下标为0 使用数组可以通过数组名与下标使用数组可以通过数组名与下标每个数组元素类似于普通的变量每个数组元素类似于普通的变量c 0 =3;c 0 +=5;-45-456 60 0727215431543-89-890 06262-3-31 16453645378781212c 1 c 1 c 2 c 2 c 4 c 4 c 3 c 3 c 5 c 5 c 6 c 6 c 7 c 7 c 8 c 8 c 9 c 9

3、 c 10 c 10 c 11 c 11 c 0 c 0 c.length2023/1/285下标下标有时也称为索引有时也称为索引必须是整数或整数表达式必须是整数或整数表达式,例如例如:c11示例示例:含有运算符的下标表达式含有运算符的下标表达式:if (x=3)t=(c 5-2 =c 3)&(c x=c 3);/t=true2023/1/286数组声明数组声明一维数组变量的声明格式有如下两种一维数组变量的声明格式有如下两种:(1)数组元素的数据类型数组元素的数据类型 变量名变量名;(2)数组元素的数据类型数组元素的数据类型 变量名变量名 ;示例示例:int c;String names;in

4、t c;String names;2023/1/287内存分配内存分配Java数组实际上也是对象,所以可通过数组实际上也是对象,所以可通过new 关键字来创建关键字来创建示例示例:int c;/声明声明c=new int12;/创建对象,并分配内存创建对象,并分配内存声明时不必指定数组的大小声明时不必指定数组的大小上面的两个语句可以简化成一个语句上面的两个语句可以简化成一个语句int c=new int12;2023/1/288初始化数组初始化数组基本数据类型的元素初始化为基本数据类型的元素初始化为0值或值或false非基本数据类型的元素初始化为非基本数据类型的元素初始化为null 可以采用循

5、环结构初始化数组可以采用循环结构初始化数组示例示例:double squares;squares=new double100;for(int i=0;i squares.length;i+)squaresi=i*i;2023/1/289通过初始化语句创建数组通过初始化语句创建数组Java语言允许通过数组的初始化语句创语言允许通过数组的初始化语句创建数组建数组示例示例:int n=10,20,30,40,50;上面语句创建了一个含有五个元素的数组上面语句创建了一个含有五个元素的数组下标值分别为下标值分别为0,1,2,3,4这时不需要运算符这时不需要运算符new2023/1/2810System.

6、arraycopy()含有一个静态的方法含有一个静态的方法 arraycopy():可以用来可以用来进行数组间的拷贝进行数组间的拷贝:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);拷贝数组拷贝数组:从源数组的指定位置从源数组的指定位置拷贝提定长拷贝提定长度的元素度的元素到目标数组的指定位置到目标数组的指定位置2023/1/2811实例实例int src=1,2,3,4,5,6;int dest=new int 12;System.arraycopy(src,0,des

7、t,0,src.length);2023/1/2812注意事项注意事项当通过循环遍历数组时当通过循环遍历数组时下标永远不要低于下标永远不要低于0下标永远要比数组元素个数小下标永远要比数组元素个数小当数组下标出错,当数组下标出错,Java 产生产生 ArrayIndexOutOfBoundsException2023/1/2813多维数组多维数组最常用的多维数组是二维数组最常用的多维数组是二维数组 int a=new int34;二维数组可以理解成如下图示的表格二维数组可以理解成如下图示的表格a 0 0 a 0 0 a 1 0 a 1 0 a 2 0 a 2 0 a 0 1 a 0 1 a 1

8、1 a 1 1 a 2 1 a 2 1 a 0 2 a 0 2 a 1 2 a 1 2 a 2 2 a 2 2 a 0 3 a 0 3 a 1 3 a 1 3 a 2 3 a 2 3 行的下标值行的下标值列的下标值列的下标值2023/1/2814示例示例 1类似于一维数组进行二维数组的声明、创建类似于一维数组进行二维数组的声明、创建(内存分配内存分配)与初始化与初始化示例示例:class J_FillArray public static void main(String args)int matrix=new int45;for(int row=0;row 4;row+)for(int co

9、l=0;col 5;col+)matrixrowcol=row+col;/内部内部for循环结束循环结束 /外部外部for循环结束循环结束 /方法方法main结束结束/类类J_FillArray结束结束2023/1/2815示例示例 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 ;2023/1/2816注意事项注意事项Java的多维数组实际上是的多维数组实际上是数组的数组数组的数组即创建以数组为元素的数组即创建以数组为元素的数组意味着意味着:二维数组的每一行可以具有不同二

10、维数组的每一行可以具有不同的列数的列数示例示例:int a ;a=new int 3 ;/allocate rowsa 0 =new int 3;/allocate row 0a 1 =new int 2;/allocate row 1a.length 行数行数a i.length 第第i行列数行列数2023/1/2817三维数组三维数组思维的扩展思维的扩展:一维数组一维数组二维数组二维数组三维数组三维数组示例示例:class J_Fill3DArray public static void main(String args)int M=new int453;for(int row=0;row

11、 4;row+)for(int col=0;col 5;col+)for(int ver=0;ver 3;ver+)Mrowcolver=row+col+ver;/内部内部for循环结束循环结束 /for循环结束循环结束 /外部外部for循环结束循环结束 /方法方法main结束结束/类类J_Fill3DArray结束结束2023/1/2818注意事项注意事项Java允许数组的维数为允许数组的维数为:三、四、或更大三、四、或更大但是,慎用高维数组但是,慎用高维数组甚至三维数组在实际的应用中也比较少甚至三维数组在实际的应用中也比较少出现出现2023/1/2819本章总体纲要本章总体纲要数组数组字符

12、串字符串字符串缓冲区字符串缓冲区向量向量哈希表哈希表2023/1/2820String的基本知识的基本知识String与与C语言不同语言不同:字符字符(char)数组不是字符串数组不是字符串(String)String数值不必以数值不必以u0000结束结束String aString bString cHello World!2023/1/2821String 直接量直接量String 直接量直接量双引号括起来的字符序列双引号括起来的字符序列示例示例:“Hello”或或“您好您好字符串赋值字符串赋值可以在声明时赋值可以在声明时赋值String c=blue;c是是String类型的变量类型的变

13、量blue是是String直接量直接量2023/1/2822String 构造构造类类 String共有共有11个构造方法,其中两个不被赞成使用个构造方法,其中两个不被赞成使用(deprecated)参见参见docsindex.html2023/1/2823示例示例/J_StringConstructors.java;开发者开发者:雍俊海雍俊海/字符串构造方法例程字符串构造方法例程public class J_StringConstructors public static void main(String args)String s1=null;String s2=new String();

14、String s3=您好您好!;String s4=new String(s3);System.out.println(s1:+s1);System.out.println(s2:+s2);System.out.println(s3:+s3);System.out.println(s4:+s4);/方法方法main结束结束/类类J_StringConstructors结束结束s1不指向任何字符串对象不指向任何字符串对象String构造方法构造方法:创建空字符串创建空字符串String构造方法构造方法:创建新字符串创建新字符串字符串直接量字符串直接量2023/1/2824String 方法方法:

15、length(),charAt()和和 getChars()方法方法 length()返回返回 String 的长度的长度与数组不同之处与数组不同之处:Strings不含有不含有 length成员域成员域方法方法charAt(int index)获得字符串指定位置的字符获得字符串指定位置的字符方法方法getChars(int srcBegin,int srcEnd,char dst,int dstBegin)拷贝字符串的部分字符序列拷贝字符串的部分字符序列到指定的字符数组的指到指定的字符数组的指定位置定位置2023/1/2825字符串比较字符串比较字符串字符串(String)比较比较字符类型的

16、数据也是数值类型数据字符类型的数据也是数值类型数据比较字符串大小,实际上就是依次比较其所比较字符串大小,实际上就是依次比较其所包含的字符的数值大小包含的字符的数值大小小写字母与大小字母是不相同的小写字母与大小字母是不相同的2023/1/2826=运算符运算符当用于基本数据类型时,用于判别是否相等当用于基本数据类型时,用于判别是否相等当用于引用数据类型时,用来判别引用是否当用于引用数据类型时,用来判别引用是否指向相同的对象指向相同的对象Java虚拟机中含有字符串池虚拟机中含有字符串池(直接量在此池内直接量在此池内),相同内容的字符串直接量,相同内容的字符串直接量相同的对象相同的对象s1=“hel

17、lo”;/字符串直接量字符串直接量s2=new String(hello);s1=hello;/trues2=hello;/false2023/1/2827实例实例:StringTest.javapublic classpublic class StringTest StringTest public static voidpublic static void main(String args)main(String args)StringString a=java;/uses anonymous object a=java;/uses anonymous object StringStrin

18、g b=java;/uses anonymous object b=java;/uses anonymous object StringString x=ja;x=ja;StringString y=va;y=va;StringString c=x+y;c=x+y;if if(a (a=b)b)SystemSystem.out.println(.out.println(a and b point to the same object););elseelse SystemSystem.out.println(.out.println(a and b do not point to the sam

19、e object););if if(a (a=c)c)SystemSystem.out.println(.out.println(a and c point to the same object););elseelse SystemSystem.out.println(.out.println(a and c do not point to the same object););/End of method:main /End of method:main/End of class:StringTest/End of class:StringTest2023/1/2828程序输出程序输出a a

20、nd b point to the same objecta and c do not point to the same object2023/1/2829字符串字符串(String)比较方法比较方法boolean equals(Object anObject)比较当前的字符串与指定的对象比较当前的字符串与指定的对象比较结果为真比较结果为真当且仅当给定的参数不为空,并且具有完全当且仅当给定的参数不为空,并且具有完全相同的字符序列相同的字符序列 例如例如:s1.equals(Hi);boolean equalsIgnoreCase(String anotherString)判别相等,但不区分大

21、小写判别相等,但不区分大小写例如例如:在不区分大小写情况下在不区分大小写情况下,“hello”与与“HELLO”相等相等2023/1/2830字符串字符串(String)比较方法比较方法int compareTo(String anotherString)比较两个字符串的内容比较两个字符串的内容返回返回:0:如果字符串内容完全相同如果字符串内容完全相同小于小于0的值的值:如果在比较第一个不相同字符,当前字符串的如果在比较第一个不相同字符,当前字符串的字符的值小于字符的值小于anotherString对应的字符的值对应的字符的值大于大于0的值的值:如果在比较第一个不相同字符,当前字符串的如果在比

22、较第一个不相同字符,当前字符串的字符的值大于字符的值大于anotherString对应的字符的值对应的字符的值int compareToIgnoreCase(String str)比较两个字符串的内容,但不区分大小写比较两个字符串的内容,但不区分大小写2023/1/2831查找字符串中的字符或子串查找字符串中的字符或子串查找字符串查找字符串(String)中的字符或子串中的字符或子串方法方法indexOf四种重载方法四种重载方法 indexOf返回第一次找到的时下标返回第一次找到的时下标如果没有找到,则返回如果没有找到,则返回-1示例示例:String name=CoolTools;Syste

23、m.out.println(name.indexOf(oo);2023/1/2832查找字符串中的字符或子串查找字符串中的字符或子串方法方法 lastIndexOf public int lastIndexOf(int ch,int fromIndex)从指定位置往回查找,返回找到的最大的字符下标位从指定位置往回查找,返回找到的最大的字符下标位置置即返回满足下面条件的最大值即返回满足下面条件的最大值:(this.charAt(k)=ch)&(k=0;c-)dest.append(source.charAt(c);return dest.toString();2023/1/2851insert

24、和和 delete 方法方法方法方法insert允许将各种数据插到允许将各种数据插到StringBuffer对象的指对象的指定位置定位置方法方法 delete(int start,int end)和和 deleteCharAt(int index)允许删除允许删除StringBuffer对象中的指定字符对象中的指定字符2023/1/2852本章总体纲要本章总体纲要数组数组字符串字符串字符串缓冲区字符串缓冲区向量向量哈希表哈希表2023/1/2853向量向量向量所对应的类是类向量所对应的类是类向量变量的声明格式向量变量的声明格式Vector 变量名变量名;示例示例Vector vs;2023/1

25、/2854创建向量实例对象创建向量实例对象Vector vs=new Vector();Vector vo=new Vector();2023/1/2855增加元素增加元素public boolean add(E o)public void addElement(E obj)示例示例vs.add(Tom);2023/1/2856修改元素修改元素public E set(int index,E element)public void setElementAt(E obj,int index)2023/1/2857删除元素删除元素public void clear()public void rem

26、oveAllElements()public E remove(int index)public void removeElementAt(int index)2023/1/2858通过迭代器通过迭代器(iterator)获取向量对象的各个元素获取向量对象的各个元素类的成员方法类的成员方法public Iterator iterator()接口的成员方法接口的成员方法boolean hasNext()接口的成员方法接口的成员方法E next()2023/1/2859本章总体纲要本章总体纲要数组数组字符串字符串字符串缓冲区字符串缓冲区向量向量哈希表哈希表2023/1/2860哈希函数或散列函数哈

27、希函数或散列函数示例示例h1(s)=s0*31(n-1)+s1*31(n-2)+.+sn-1哈希码哈希码(hash code)或散列索引或散列索引由哈希函数计算出来的数值由哈希函数计算出来的数值2023/1/2861哈希表的空间利用率哈希表的空间利用率哈希表的容量哈希表的容量(capacity)哈希表的存储空间大小哈希表的存储空间大小哈希表的装填因子哈希表的装填因子2023/1/2862哈希表类哈希表类2023/1/2863示例示例/J_Hashtable.java;开发者开发者:雍俊海雍俊海/通过哈希表形成数组下标与值之间的双向映射。通过哈希表形成数组下标与值之间的双向映射。import j

28、ava.util.Hashtable;public class J_Hashtable public static void main(String args)String sa=Mary,Tom,John,James,Louis,Jim,Rose,Ann,Liza,Betty,Henry,Albert;Hashtable ht=new Hashtable();2023/1/2864示例示例 /往哈希表中添加元素,并使得关键字与值之间建立起映射关系往哈希表中添加元素,并使得关键字与值之间建立起映射关系 int i;for(i=0;i sa.length;i+)ht.put(sai,new In

29、teger(i);/通过下标获得姓名通过下标获得姓名(字符串值字符串值)i=8;System.out.println(在在sa数组中,下标为数组中,下标为+i+的字符串是的字符串是+sai+);/通过哈希表,直接获得姓名通过哈希表,直接获得姓名(字符串值字符串值)的数组下标的数组下标 String s=sai;System.out.println(在在sa数组中,数组中,+s+的下标是的下标是+ht.get(s);/方法方法main结束结束/类类J_Hashtable结束结束2023/1/2865编译编译,运行运行&输出输出2023/1/2866作业作业1.教材习题教材习题4.52023/1/

30、2867本课件使用要求本课件使用要求使用本课件,必须注明引用使用本课件,必须注明引用(具体见下一具体见下一个幻灯片个幻灯片)书及课件均可能出现一些错误和缺陷,书及课件均可能出现一些错误和缺陷,恳切希望广大读者特别是讲授此课程的恳切希望广大读者特别是讲授此课程的老师批评指正老师批评指正2023/1/2868引用声明引用声明本课件来源于本课件来源于(或参考了或参考了)下面的书及其课下面的书及其课件件:雍俊海雍俊海.Java程序设计教程程序设计教程.北京北京:清华清华大学出版社大学出版社,2007.2023/1/2869免责声明免责声明请合法使用课件,其用途应当合法有益请合法使用课件,其用途应当合法

31、有益而且不应对任何人造成任何伤害或损失而且不应对任何人造成任何伤害或损失同时请注意教材作者及出版社没有对本同时请注意教材作者及出版社没有对本课件课件作作出任何承诺与保证出任何承诺与保证2023/1/2870参考文献参考文献本课件的参考文献与下面书的参考文献相同本课件的参考文献与下面书的参考文献相同雍俊海雍俊海.Java程序设计教程程序设计教程.北京北京:清华大学清华大学出版社出版社,2007.雍俊海雍俊海.Java程序设计习题集程序设计习题集(含参考答案含参考答案).北京北京:清华大学出版社清华大学出版社,2006.雍俊海雍俊海.Java程序设计程序设计.北京北京:清华大学出版清华大学出版社社

32、,2004.2023/1/2871雍俊海编写过的教材和教参雍俊海编写过的教材和教参1.雍俊海雍俊海.计算机动画算法与编程基础计算机动画算法与编程基础.北京北京:清华大学出清华大学出版社版社.2008.2.雍俊海雍俊海.Java程序设计程序设计.北京北京:清华大学出版社清华大学出版社.2008.3.雍俊海雍俊海.Java程序设计教程程序设计教程(第第2版版).北京北京:清华大学出清华大学出版社版社.2007.4.雍俊海雍俊海.Java程序设计习题集程序设计习题集(含参考答案含参考答案).北京北京:清华清华大学出版社大学出版社,2006.5.雍俊海雍俊海.Java程序设计程序设计.北京北京:清华大

33、学出版社清华大学出版社.2004.2023/1/2872雍俊海编写过的教材和教参雍俊海编写过的教材和教参雍俊海雍俊海.计算机动画算法与编程基础计算机动画算法与编程基础.北京北京:清华大清华大学出版社学出版社.2008.2023/1/2873雍俊海编写过的教材和教参雍俊海编写过的教材和教参雍俊海雍俊海.Java程序设计程序设计.北京北京:清华大学出版社清华大学出版社,2008.2023/1/2874雍俊海编写过的教材和教参雍俊海编写过的教材和教参雍俊海雍俊海.Java程序设计教程程序设计教程.清华大学出版社清华大学出版社,2007.普通高等教育精品教材普通高等教育精品教材普通高等教育普通高等教育“十一五十一五”国国家级规划教材家级规划教材2023/1/2875雍俊海编写过的教材和教参雍俊海编写过的教材和教参雍俊海雍俊海.Java程序设计习题程序设计习题集(含参考答案)集(含参考答案).清华大学出版社清华大学出版社,2006.2023/1/2876雍俊海编写过的教材和教参雍俊海编写过的教材和教参雍俊海雍俊海.JAVA程序设计程序设计.北京北京:清华大学出版社清华大学出版社.2004.2023/1/2877谢谢谢谢请多指教请多指教

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁