《[计算机软件及应用]4、数组、字符串、向量和哈希表》由会员分享,可在线阅读,更多相关《[计算机软件及应用]4、数组、字符串、向量和哈希表(98页珍藏版)》请在金锄头文库上搜索。
1、1,第四章 数组、字符串、向量和哈希表,浙江工业大学 陆佳炜,Email:,手 机:60013777802052,QQ:363650043,2,数组 数组的应用 字符串String 可变字符序列StringBuffer,本章内容:,回顾关键词:封装性、继承性、多态性、 abstract、static、final 、接口、包、内部类,3,4.1 数组,数组是相同类型的数据元素按顺序组成的一种复合数据类型,元素在数组中的相对位置由下标来指明。 例如:public static void main(String args) 其中args是String类型的数组 占用连续的内存地址 数组的静态性 一旦
2、创建就不能修改数组的长度,4,数组声明,一维数组变量的声明格式有如下两种: (1) 数组元素的数据类型 变量名; (2) 数组元素的数据类型 变量名 ; 示例: int c; String names; int c ; String names ;,5,数组的实例化,Java数组实际上也是对象,所以可通过new 关键字来创建。 示例: int c; / 声明,不必指定数组的大小 c = new int12; / 创建对象,并分配内存 上面的两个语句可以简化成一个语句: int c = new int12; 数组的长度用数组名.length,如c.length 数组元素用数组名下标表示,下标的范
3、围是0数组长度1,如c0,6,初始化数组,基本数据类型的元素初始化为0值或false 非基本数据类型的元素初始化为null 可以采用循环结构初始化数组 示例: double squares; squares = new double100; for (int i=0; i squares.length; i+) squaresi = i*i; ,7,通过初始化语句创建数组,Java语言允许通过数组的初始化语句创建数组 示例: int n = 10, 20, 30, 40, 50 ; 上面语句创建了一个含有五个元素的数组 下标值分别为0, 1, 2, 3, 4 这时不需要运算符new,8,数组的
4、内存分配示例,9,数组的注意事项,当通过循环遍历数组时 下标永远不要低于0 下标永远要比数组元素个数小 当数组下标出错,Java 产生 ArrayIndexOutOfBoundsException异常 数组一旦创建后,不能调整大小 可使用相同的引用变量来引用一个全新的数组 int a = new int6; a = new int10;,10,多维数组,最常用的多维数组是二维数组 int a = new int34; 二维数组可以理解成如下图示的表格,行的下标值,列的下标值,11,二维数组的创建(内存分配),(1)直接为每一维分配空间,如: int a = new int23; 该语句创建了一
5、个二维数组a,其较高一维含两个元素,每个元素为由3个整型数构成的整型数组。 此时该数组的元素为: a00 a01 a02 a10 a11 a12,12,二维数组的创建(内存分配),(2)从最高维开始,分别为每一维分配空间 二维数组的实际上是数组的数组,即创建以数组为元素的数组,意味着: 二维数组的每一行可以具有不同的列数,如: int b = new int2 ; / 最高维含2个元素,每个元素为一个整型数组 b0 = new int3; b1 = new int5; 此时该数组的元素为: b00 b01 b02 b10 b11 b12 b13 b14,13,二维数组元素的初始化,(1)先创建
6、二维数组,然后通过循环直接对每个元素进行赋值,如: int matrix = new int45; for (int row=0; row matrix.length; row+) for (int col=0; col matrixrow.length; col+) matrixrowcol = row + col; 注:二维数组的长度指的是二维数组的行数,用数组名.length表示,某i行的数组长度(该行的列数)用数组名i.length表示,14,二维数组元素的初始化,(2)在声明数组的同时进行初始化。如: int a =2,3,1,5,3,4; 声明了一个32的数组,并对每个元素赋值,即
7、: a00 = 2 a01 = 3 a10 = 1 a11 = 5 a20 = 3 a21 = 4,15,例:构造杨辉三角形,class Yanghui public static void main(String args) int yanghui =1,1,1,1,2,1,1,3,3,1, 1,4,6,4,1; for(int i=0;iyanghui.length;i+) for(int j=0;jyanghuii.length;j+) System.out.print(“t“+yanghuiij); System.out.println(); ,16,4.2数组的应用,复制数组 数组的
8、封装类Arrays 数组用作参数和返回值 main方法的数组参数获取命令行输入,17,复制数组,Java在System类中提供了一个特殊的方法arraycopy(),用于实现数组之间的复制 public class ArrayCopy public static void main(String args) int i; int arr1=1,2,3,4,5,6,7,8,9,10; int arr2=new int10; /把arr1中所有元素复制到arr2中,下标从0开始 System.arraycopy(arr1,0,arr2,0,arr1.length); /arr2如果长度短于arr1
9、,会出现异常。如果长度长于arr1,后面的元素将使用默认值 for(i=0;iarr2.length;i+) System.out.print(arr2i+“ “); System.out.println(); ,18,数组的封装类Arrays,java.util包封装了一个Arrays类,可实现数组操作的查找、复制和排序 static int binarySearch(int a, int fromIndex, int toIndex, int key) static int copyOf(int original, int newLength) static int copyOfRange
10、(int original, int from, int to) static void sort(int a) /ascending,19,例:数组元素排序,import java.util.Arrays; public class ArraySort public static void main(String args) int hold=10,1,8,3,6,5,4,7,2,9; Arrays.sort(hold); for(int i=0;ihold.length;i+) System.out.print(holdi+“ “); ,20,数组用作参数和返回值,数组可以作为参数传递给方
11、法,也可以作为方法的返回值 在调用的方法中的数组对象与调用者中的是同一个。 如果在方法中修改了任何一个数组元素,因为这个数组与方法之外的数组对象是同一个,所以方法之外的数组也将发生改变。,21,例:数组作为调用方法的传递参数,public class CallArray static void updateArray (int arrays) arrays3=10; public static void main(String args) int hold=0,1,2,3,4,5,6,7,8,9; updateArray(hold); for(int i=0;ihold.length;i+)
12、System.out.print(holdi+“ “); 运行时,hold数组的内容如下: 0,1,2,10,4,5,6,7,8,9,22,例:数组作为方法的返回结果,public class ReturnArray static int updateArray(int arrays) for(int i=0;iarrays.length;i+) arraysi=i; return arrays; public static void main(String args) int hold=9,8,7,3,5,6,4,2,1,0; hold= updateArray(hold); for(int
13、 i=0;ihold.length;i+) System.out.println(“hold“+i+“=“+holdi); ,23,main方法的数组参数获取命令行输入,在Java程序的主方法public static void main (String args ) 中,args 是一个字符串数组,用来接收应用程序被调用时由用户直接从键盘输的参数。 例:应用程序被调用时参数的传递 public class MyFriend public static void main (String arg) System.out.println(arg0+ “and“+ arg1 +“are my go
14、od friends! “); G:java MyFriend Tom Alice 结果: Tom and Alice are my good friends!,24,1、 下列程序有没有错误? class CMethod int i; int j; static int s; public void add() s=i+j; static void add(int i, int j) this.i=i; this.j=j; s=i+j; ,黄金仙桃题,25,1、 下列程序有没有错误? class CMethod int i; int j; static int s; public void
15、add() s=i+j; static void add(int i, int j) this.i=i; this.j=j; s=i+j; ,黄金仙桃题,26,4.3 字符串String,在Java中字符串是对象,用String类来创建 在Java中对字符串的处理,需要事先创建一个String的实例,即像其它对象一样,需要对String声明和实例化, 如:,但我们也可以用简写的形式,像基本数据类型一样创建String ,如:,27,String对象,与C语言不同: 字符(char)数组不是字符串(String) String对象一旦被创建后就不能被改变,称为非可变对象,28,String的构造方法,S