版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 数组、字符串、向量与哈希表7/16/20221本章总体纲要数组字符串字符串缓冲区向量哈希表7/16/20222数组由相同类型的若干项数据组成例如:public static void main(String args)其中args是String类型的数组占用连续的内存地址数组的静态性一旦创建就不能修改数组的长度类似于动态数组的类型类Vector长度可以变大或缩小7/16/20223数组声明一维数组变量的声明格式有如下两种:(1)数组元素的数据类型 变量名;(2)数组元素的数据类型 变量名 ;示例:int c; String names; int c ; String names ; 7
2、/16/20224内存分配Java数组实际上也是对象,所以可通过new 关键字来创建示例:int c; / 声明c = new int12; / 创建对象,并分配内存声明时不必指定数组的大小上面的两个语句可以简化成一个语句int c = new int12;7/16/20225声明和初始化数组声明数组 type arrayName ; 或 type arrayName;给数组分配内存(也叫初始化) arrayName =new typesize;可以在同一条语句中对数组声明并初始化 type arrayname =new typesize;如何获得数组的长度? 数组名.length7/16/2
3、0226数组元素的初始化基本数据类型的元素初始化为0值或false非基本数据类型的元素初始化为null 可以采用循环结构初始化数组示例:double squares; squares = new double100; for (int i=0; i squares.length; i+) squaresi = i*i; 7/16/20227示例使用数组可以通过数组名与下标每个数组元素类似于普通的变量c 0 = 3;c 0 += 5;7/16/20228下标有时也称为索引必须是整数或整数表达式, 例如:c11注:表达式可以是常数、变量、以及由常数、变量和运算符组成的式子7/16/20229通过初
4、始化语句创建数组Java语言允许通过数组的初始化语句创建数组示例: int n = 10, 20, 30, 40, 50 ;上面语句创建了一个含有五个元素的数组下标值分别为0, 1, 2, 3, 4这时不需要运算符new7/16/202210注意事项当通过循环遍历数组时下标永远不要低于0下标永远要比数组元素个数小当数组下标出错,Java 产生 ArrayIndexOutOfBoundsException7/16/202211数组作为输入参数数组可以作为方法的输入变量(形式参数)和返回值,在声明它们时必须用空括号,而且不能指定其大小。数组是引用类型,将其作为输入参数(即形参),在方法内对它的数据
5、元素所作的改变将影响到方法外7/16/202212public class AaaryParameters public static void changeOrNot(int i, double x) i=-1; x0=-2.0; double y=x; y1=-3.0; double z =-4,-4,-4; x=z; public static void main(String args ) int k=1; double A =1.0, 2.0, 3.0; changeOrNot(k,A); System.out.println(“k: + k); System.out.println
6、(“A0: + A0); System.out.println(“A1: + A1); System.out.println(“A2: + A2); 运行结果:A0:-2.0A1:-3.0A3:3.07/16/202213多维数组最常用的多维数组是二维数组 int a = new int34;二维数组可以理解成如下图示的表格a 0 0 a 1 0 a 2 0 a 0 1 a 1 1 a 2 1 a 0 2 a 1 2 a 2 2 a 0 3 a 1 3 a 2 3 行的下标值列的下标值7/16/202214示例 1类似于一维数组进行二维数组的声明、创建(内存分配)与初始化示例:class J_
7、FillArray public static void main (String args) int matrix = new int45; for (int row=0; row 4; row+) for (int col=0; col 5; col+) matrixrowcol = row + col; / 内部for循环结束 / 外部for循环结束 / 方法main结束 / 类J_FillArray结束7/16/202215示例 2通过初始化语句创建数组示例: double c = 1.0, 2.0, 3.0, 4.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.
8、0, 0.0 ; 7/16/202216注意事项Java的多维数组实际上是数组的数组即创建以数组为元素的数组意味着: 二维数组的每一行可以具有不同的列数示例: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行列数7/16/202217三维数组思维的扩展: 一维数组二维数组三维数组示例:class J_Fill3DArray public static void main (Strin
9、g args) int M = new int453; for (int row=0; row 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结束7/16/202218注意事项Java允许数组的维数为: 三、四、或更大但是,慎用高维数组甚至三维数组在实际的应用中也比较少出现7/16/202219本章总体纲要数组字符串字符串缓冲区
10、向量哈希表7/16/202220String的基本知识String与C语言不同: 字符(char)数组不是字符串(String)String数值不必以u0000结束String aString bString cHello World!7/16/202221String 直接量String 直接量双引号括起来的字符序列示例: “Hello” 或 “您好字符串赋值可以在声明时赋值String c = blue;c是String类型的变量blue是String直接量7/16/202222String 构造类 String共有11个构造方法,其中两个不被赞成使用(deprecated)参见docsi
11、ndex.html7/16/202223创建String对象常用的三种方法String( ): 初始化一个新的String对象 String s1=new String( ); s1=“您好”;String(String value):初始化一个新的String对象,使其包含与参数字符串相同的字符序列 String s2; s2=“您好”; 以上两句常合并为一句: String s2=“您好”;String(char value): 分配一个新的String对象,使它代表字符数组参数包含的字符序列 char c=您, 好; String s3=new String( c ); 7/16/202
12、224示例/ J_StringConstructors.java; 开发者: 雍俊海/ 字符串构造方法例程public class J_StringConstructors public static void main(String args ) String s1 = null; String s2 = new String( ); String s3 = 您好!; String s4 = new String( s3 ); System.out.println(s1: + s1); System.out.println(s2: + s2); System.out.println(s3:
13、+ s3); System.out.println(s4: + s4); / 方法main结束 / 类J_StringConstructors结束s1不指向任何字符串对象String构造方法: 创建空字符串String构造方法: 创建新字符串字符串直接量7/16/202225练习:使用数组存储一个英文句子:“Java is an objected oriented programming language”,显示该句子,并算出每个单词的平均字母数。问题分析:为了算出每个单词的平均字母数,需要把字符总数除以单词数7/16/202226public class AverageCharacters
14、public static void main(String args ) String s=“Java ”, “is ” , “an ” , “object ” , “oriented ” , “programming ” , “language”; int numChars=0; for(int i=0; is.length; i+) System.out.print(si); numChars += si.length(); System.out.println( ); System.out.println(“Total chars: + numChars); System.out.pr
15、intln (“Total words: + s.length); System.out.println(“Avg.chars: + (double)numChars/s.length);7/16/202227String 方法:length( ), charAt( ) 和 getChars( )方法 length( )返回 String 的长度与数组不同之处: Strings不含有 length成员域方法charAt(int index) 获得字符串指定位置的字符方法getChars(int srcBegin, int srcEnd, char dst, int dstBegin) 拷贝字符
16、串的部分字符序列到指定的字符数组的指定位置7/16/202228字符串比较字符串(String)比较字符类型的数据也是数值类型数据比较字符串大小,实际上就是依次比较其所包含的字符的数值大小小写字母与大小字母是不相同的7/16/202229= 运算符当用于基本数据类型时,用于判别是否相等当用于引用数据类型时,用来判别引用是否指向相同的对象Java虚拟机中含有字符串池(直接量在此池内),相同内容的字符串直接量相同的对象s1 = “hello”; / 字符串直接量s2 = new String( hello );s1 = hello; / trues2 = hello; / false7/16/20
17、2230字符串(String)比较方法boolean equals(Object anObject)比较当前的字符串与指定的对象比较结果为真当且仅当给定的参数不为空,并且具有完全相同的字符序列 例如: s1.equals( Hi );boolean equalsIgnoreCase(String anotherString)判别相等,但不区分大小写例如: 在不区分大小写情况下, “hello”与“HELLO”相等7/16/202231字符串(String)比较方法int compareTo(String anotherString) 比较两个字符串的内容返回: 0 : 如果字符串内容完全相同小
18、于0的值: 如果在比较第一个不相同字符,当前字符串的字符的值小于anotherString对应的字符的值大于0的值: 如果在比较第一个不相同字符,当前字符串的字符的值大于anotherString对应的字符的值int compareToIgnoreCase(String str) 比较两个字符串的内容,但不区分大小写7/16/202232查找字符串中的字符或子串查找字符串(String)中的字符或子串方法indexOf四种重载方法 indexOf返回第一次找到的时下标如果没有找到,则返回-1示例:String name = CoolTools;System.out.println (name.
19、indexOf(oo);7/16/202233查找字符串中的字符或子串方法 lastIndexOf public int lastIndexOf(int ch, int fromIndex) 从指定位置往回查找,返回找到的最大的字符下标位置即返回满足下面条件的最大值:(this.charAt(k) = ch) & (k = 0; c-) dest.append(source.charAt(c); return dest.toString();7/16/202249insert 和 delete 方法方法insert允许将各种数据插到StringBuffer对象的指定位置方法 delete(in
20、t start, int end) 和 deleteCharAt(int index) 允许删除StringBuffer对象中的指定字符7/16/202250本章总体纲要数组字符串字符串缓冲区向量哈希表7/16/202251向量向量所对应的类是类java.util.Vector向量变量的声明格式Vector 变量名;示例Vector vs;7/16/202252创建向量实例对象Vector vs = new Vector( );Vector vo = new Vector( );7/16/202253增加元素public boolean add(E o)public void addEleme
21、nt(E obj)示例vs.add(Tom);7/16/202254修改元素public E set(int index, E element)public void setElementAt(E obj, int index)7/16/202255删除元素public void clear( )public void removeAllElements( )public E remove(int index)public void removeElementAt(int index)7/16/202256通过迭代器(iterator)获取向量对象的各个元素类java.util.Vector的成员方法public Iterator iterator( )接口java.util.Iterator的成员方法boolean hasNext( )接口java.util.Iterator的成员方法E next( )7/16/202257本章总体纲要数组字符串字符串缓冲区向量哈希表7/16/202258哈希函数或散列函数示例h1(s)=s0*31(n-1)+s1*31(n-2)+. . +sn-1哈希码(hash code)或散列索引由哈希函数计算出来的数值7/16/2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋买卖合同协议书范本下载
- 直播劳务的合同
- 图书销售合同
- 商铺转让租赁合同范本
- 提高团队协作能力的技能培训课程
- 鱼种产品购销合同书样本年
- 2025合同模板修缮修理合同范本
- 隧洞施工合同范本
- 装修房屋托管合同范本
- 购房协议合同
- 五年级数学(小数乘除法)计算题专项练习及答案汇编
- 淋巴瘤患者的护理
- 水利工程建设管理概述课件
- 人美版初中美术知识点汇总九年级全册
- 2022中和北美腰椎间盘突出症诊疗指南的对比(全文)
- 深度学习视角下幼儿科学探究活动设计
- 乳房整形知情同意书
- 全国核技术利用辐射安全申报系统填报指南
- GB/T 18344-2016汽车维护、检测、诊断技术规范
- 青岛版科学(2017)六三制六年级下册第2单元《生物与环境》全单元课件
- 2022-2023年人教版九年级物理上册期末考试(真题)
评论
0/150
提交评论