数组、向量和字符串.ppt

上传人:小飞机 文档编号:6297444 上传时间:2023-10-14 格式:PPT 页数:50 大小:1.55MB
返回 下载 相关 举报
数组、向量和字符串.ppt_第1页
第1页 / 共50页
数组、向量和字符串.ppt_第2页
第2页 / 共50页
数组、向量和字符串.ppt_第3页
第3页 / 共50页
数组、向量和字符串.ppt_第4页
第4页 / 共50页
数组、向量和字符串.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《数组、向量和字符串.ppt》由会员分享,可在线阅读,更多相关《数组、向量和字符串.ppt(50页珍藏版)》请在三一办公上搜索。

1、第4章 数组、向量和字符串,数组,数组说明数组是一系列的匿名变量,数组中的元素可通过下标来访问在Java中,数组是对象。类Object中定义的方法都可以用于数组对象。可以说明任何类型的数组基本类型,类类型,数组等数组在使用之前必须先说明,一维数组的定义,type arrayName;变量名后接方括号将方括号放到变量名的左面,char s;int intArray;Date dateArray;Point points;,type arrayName;,创建数组,静态初始化和动态初始化 静态初始化就是在定义数组的同时对数组元素进行初始化 静态初始化可用于任何元素类型,初值块中每个位置的每个元素对

2、应一个引用。动态初始化是使用运算符new为数组分配空间。数组说明的方括号中的数字表示数组元素个数,静态初始化,int intArray=1,2,3,4;int ages=34,12,45;double heights=84.124,78.2,61.5;boolean tired=true,false,false,true;String names=“Zhang,“Li,“Wang;,动态初始化,type arrayName=new typearraySizetype arrayName=new typearraySize,s=new char20;,复合类型的数组,复合类型的数组需要经过两步进

3、行空间分配 使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化 第一步先创建数组本身:type arrayName=new typearraySize;第二步分别创建各个数组元素:arrayName0=new type(paramList);arrayNamearraySize-1=new type(paramList);,复合类型的数组,points=new Point100;points0=new Point();points1=new Point();points99=new Point();,string stringArrar;stringArray=new Str

4、ing3;stringArray0=new String(“how”);stringArray1=new String(“are”);,Java中没有静态的数组定义,内存都是通过new动态分配的。int intArray5;/是错误的,数组说明与创建关系,Point类 class Point int x,y;Point(int x1,int y1)x=x1;y=y1;Point()this(0,0);,数组说明与创建关系,points,(a),points,Length:100,(b),points,Length:100,X:Y:,(c),Point points;执行完毕,系统为变量poin

5、ts分配一个引用空间,points=new Point 100;执行完毕,系统在内存中分配一个数组对象并把数组引用赋给变量points,points1=new Point();,数组说明注意,数组变量的类型可以指向它的父类正确错误,Object points;points=new Point 100;,Point points;points=new Object 100;,数组边界,数组下标从0开始,元素个数length是数组类中唯一的数据成员变量 new创建数组时系统自动给length赋值数组一旦创建完毕,其大小就固定下来程序运行时可以使用length进行数组边界检查。如果发生越界访问,则抛

6、出一个异常,数组边界例,int list=new int 10;for(int i=0;i list.length;i+)/进行相应处理的代码,循环的结束条件中使用list.length,而不是常数10。这样做不会引起数组下标越界,使程序更健壮,修改更方便。,数组元素的引用,数组名加上下标,引用方式为:index为数组下标,下标从0开始,一直到length-1下标是整型常数或表达式程序4-1设给定一组整型数,求它们的平均值,arrayNameindex,arrayName1,arrayNamei,arrayName6*i,多维数组,多维数组的定义 Java中没有真正的多维数组,可以建立数组的数

7、组(的数组),由此得到多维数组n维数组是n-1维数组的数组说明多维数组时使用类型及多对方括号,二维数组,二维数组的定义方式:与一维数组一样,定义对数组元素也没有分配内存空间,要使用运算符new来分配内存,然后才可以访问每个元素,type arrayName type arrayName,多维数组的初始化,静态初始化 在定义数组的同时为数组分配空间 动态初始化 直接为每一维分配空间 从最高维起(而且必须从最高维开始),分别为每一维分配内存,int intArray=2,3,1,5,3,4;数组intArray为一个3行2列的数组,它的形式如下:2 31 53 4,type arrayName=n

8、ew typearraylength1arraylength2例如:int a=new int23;,type arrayN=new type arrleng1;arrayN 0=new type arrleng2;arrayN 1=new type arrleng2;.arrayN arrleng1-1=new type arrleng2;,二维数组例一,int twoDim=new int 4;twoDim0=new int5;twoDim1=new int5;,二维数组例二,String s=new String2;s0=new String2;s1=new String3;s00=ne

9、w String(“Good”);s01=new String(“Luck”);s10=new String(“to”);s11=new String(“you”);s12=new String(“!”);,非矩阵数组,int twoDim=new int 4;twoDim0=new int2;twoDim1=new int4;twoDim2=new int6;twoDim3=new int8;,X XX X X XX X X X X X X X X X X X X XtwoDim数组为4行,每行的元素个数分别为2,4,6,8个,矩阵数组,二维矩阵数组的一般说明格式为:arrayName是数组

10、名,length1和length2分别为数组各维的大小,type是数组元素的类型。,type arrayName=new type length1length2;,二维矩阵数组,int matrix=new int 45;将创建一个有4个一维数组的数组,每个一维数组中又有5个整数,即4行5列的整数矩阵。该行等价于下列这段代码:int matrix=new int 4;for(int j=0;j matrix.length;j+)matrixj=new int5;,多维数组说明,正确的声明:int a1=new int 23;int a2=new int 2;int a3=new int 46;

11、错误的说明:int errarr123;int errarr2=new int 4;int errarr34=new int 34;,不允许说明静态数组,说明顺序应从高维到低维,数组维数的指定只能出现在new运算符之后,多维数组的引用,二维数组引用方式为:arrayNameindex1index2例如:int myTable=new int43;myTable00=34;myTable01=15;myTable02=26;,多维数组的引用例,int myTable=23,45,65,34,21,67,78,46,14,18,46,98,63,88,98,81,64,90,21,14,23,54

12、,43,55,76,22,43,33;for(int row=0;row4;row+)for(int col=0;col7;col+)System.out.print(myTablerowcol+);System.out.println();,多维数组的引用例,计算表中各行元素之和并查找其值最大的那个行 程序4-2,length属性,多维数组的length属性只返回第一维的长度 int ages47;ages.length;/返回4,而不是28 可以分别存取每一维的长度,如:int ages=int ages47;int firstArray=ages0;ages.length*firstAr

13、ray.length;/返回 28,Arrays类常用的方法,int binarySearch(type a,type key)对关键字key在数组a中进行二分查找,但要求数组a必须已经排序,否则返回值无意义 boolean equals(type a,type a2)它判定两个数组大小是否相同,并且每一个元素是否相等。两个null数组是相等的,数组拷贝,Java方法arraycopy(),class ArrayTestpublic static void main(String args)int elements=1,2,3,4,5,6;int hold=10,9,8,7,6,5,4,3,2

14、,1;System.arraycopy(elements,0,hold,0,elements.length);,Vector类,对应于类似数组的顺序存储的数据结构,允许不同类型的元素共存于一个变长数组中,可以看作是把不同类型元素按照动态数组进行处理可以看作是一个可变大小的数组 用一个整数类型的次序值来访问 增加或删除了元素,大小也变大或变小,概述,适合情况:需要处理的对象数目不定,序列中的元素都是对象或可以表示为对象;需要将不同类的对象组合成一个数据序列;需要做频繁的对象序列中元素的插入和删除;经常需要定位序列中的对象和其他查找操作;在不同的类之间传递大量的数据;,Vector类,elemen

15、tData 存放数据元素 elementCount 记录Vector中元素的实际个数 capacityIncrement 容量增值,Vector构造方法,public Vector()构造一个空向量public Vector(int initialCapacity)以初始存储容量initialCapacity构造一个空的向量Vectorpublic Vector(int initialCapacity,int capacityIncrement)以初始存储容量initialCapacity和容量增量capacityIncrement构造一个空的向量Vector例如:Vector MyVecto

16、r=new Vector(100,50);,Vector类的操作,元素的添加addElement(Object obj):将新元素添加到序列尾部insertElementAt(Object obj,int index):将指定对象obj插入到指定位置index处,Vector MyVector=new Vector();for(int i=1;i=10;i+)MyVector.addElement(new Random();MyVector.insertElementAt(middle,5);,元素的删改,setElementAt(Object obj,int index)将向量序列index

17、位置处的对象元素设置为objremoveElement(Object obj)删除第一个与指定的obj对象相同的元素,将后面的元素前提,补上空位removeElementAt(int index)删除index指定位置处的元素,同时将后面的元素前提removeAllElements()清除向量序列中的所有元素,向量的大小置为0,删除修改实例,Vector MyVector=new Vector(100);for(int i=0;i10;i+)MyVector.addElement(“welcome”);MyVector.addElement(“to”);MyVector.addElement(

18、“beijing”);while(MyVector.removeElement(“to”);,元素的查找,Object elementAt(int index)返回指定位置处的元素boolean contains(Object obj)检查向量序列中是否包含指定的对象元素objint indexOf(Object obj,int start_index)从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若对象不存在,则返回-1int lastIndexOf(Object obj,int start_index)从指定的start_index

19、位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若对象不存在,则返回-1,Vector的其他方法,public final int size()返回向量中的元素数量public final boolean contains(Object elem)判断对象elem是否在向量中public final int indexOf(Object elem)从向量的第一个元素开始查找指定对象,并返回该对象的索引值(如果查找不成功则返回-1),Vector的其他方法,capacity():返回Vector的容量;clone():建立Vector的备份;copyInto(Objec

20、t):把Vector中的元素拷贝到一个数组中;firstElement():返回第一个元素;lastElement():返回最后一个元素;isEmpty():判断是否为空;setSize(int size):设置Vector的大小;trimToSize():将Vector的容量下调至最小值,Vector类的使用举例,程序4-4 使用Vector类的方法,向向量增加不同类型的元素并输出Vector元素,字符串类型,字符串 内存中连续排列的一个或多个字符String 处理不变字符串StringBuffer处理可变字符串,字符串说明及初始化,字符串常量系统为程序中出现的字符串常量自动创建一个Stri

21、ng对象 字符串变量,System.out.println(“This is a String”);将创建“This is a String”对象,String s1;StringBuffer sb1;String s1=new String();char chars=a,b,c;String s2=new String(chars);String s3=Hello World!;,字符串处理String类,length()返回字符串中的字符个数charAt(int index)返回字符串中index位置的字符toLowerCase()将当前字符串中所有字符转换为小写形式,字符串处理Strin

22、g类,toUpperCase()将当前字符串中所有字符转换为大写形式subString(int beginIndex)当前字符串中从beginIndex开始到末尾的子串replace(char oldChar,char newChar)将当前字符串中出现的所有oldChar转换为newChar,字符串处理例,程序4-5,StringBuffer类,修改一个StringBuffer类的字符串时,不用再创建一个新的字符串对象,而是直接操作原字符串分配内存时,除去字符所占空间外,再另加16个字符大小的缓冲区 StringBuffer的长度是指存储在其中的字符个数,容量是指缓冲所能容纳的最大字符数,连

23、接,String类对象使用concat(String str)方法将str连接在当前字符串的尾部 重载运算符“+”StringBuffer类对象使用append()方法实现连接,String s=This is the;String t=s.concat(String.);t的内容为:This is the String.,String s=He is+age+years old.;,String s=new StringBuffer(He is).append(age).append(years old.).toString();,比较,可用方法使用关系运算符“=”与equals()方法不同的是,“=”判定两字符串对象是否是同一实例,即它们在内存中的存储空间是否相同,compareTo()、equals()、equalsIgnoreCase()、regionMatches(),比较例子,程序4-6,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号