第 7章 数 组
7.1 声明和创建数组
7.2 多维数组
7.3 传递数组
7.4 Java application命令行参数
7.5 Arrays类
7.6 数组的复制
7.7 习题
7.1 声明和创建数组
数组是数据类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。
内存分配时,数组对应着一组顺序排放的存储单元,数组中的每个元素按照创建时的次序在其中存放。
Java语言中,数组是一个对象。使用前需要声明和创建。
7.1.1 声明数组数据类型 [] 数组名例:
int[] a;
Integer[] c;
数据类型 数组名 []
例:
int b[];
注意:
int[5] a; //错误
7.1.2 创建数组数组名= new 数据类型 [数组元素个数 ]
例:
a=new int[5];
Integer[] c= new Integer[5];
注意,数组的声明和创建可以出现在同一条语句中。
7.1.2 创建数组(续)
访问数组中的元素:
数组名 [下标表达式 ]
注意,下标表达式的最大值是数组元素个数减 1,数组元素个数可通过数组对象的数据成员 length获取。
例 7-1 创建数组源代码 运 行
7.1.2 创建数组(续)
对象数组中保存只是可以用来连接该类对象的引用。在访问这些对象的成员前,
必须使用 new运算符创建实际的对象。
例 7-2 对象数组源代码 编译运行
7.1.2 创建数组(续)
创建数组时可以给数组元素指定初始值:
例:
int[] b=new int[]{1,2,3,}
//不能写成 int[] b=new int[3]{1,2,3,}
更简洁的初始化方式:
例:
int[] b={1,2,3,};
//只能与数组声明出现在同一条语句中
7.1.2 创建数组(续)
int[] b;
b={1,2,3}; //错误而:
int[] b;
b=new int[]{1,2,3};//正确例 7-3 初始化数组源代码 编译运行
7.2 多维数组
int[][] a=new int[3][4];
int[][][] a=new int[3][4][5];
7.2 多维数组(续)
分步创建多维数组:
int[][] a=new int[3][]
a[0]=new int[4];
a[1]=new int[4];
a[2]=new int[4];
等价于:
int[][] a=new int[3][4];
7.2 多维数组(续)
组成多维数组的数组对象可以含有不同数目的元素,也即多维数组并不一定要是,矩形,或,长方体,等形状。
例:
int[][] a=new int[3][]
a[0]=new int[1];
a[1]=new int[2];
a[2]=new int[3];
7.2 多维数组(续)
创建多维数组时,可以同时初始化:
int[][] a1={{1,},{2,3,},{4,5,6,},{7,8,},};
int [][][] a2 =new[][][]
{{1,2,3,},{4,5,6,},{7,8,9,},} ;
例 7-4 多维数组源代码 运 行
7.3 传递数组例 7-5 把数组传递给方法例 7-6 返回数组源代码 运 行源代码 运 行
7.4 Java application命令行参数
可以在命令行中给 main方法的 String[]
型参数传递实参 。
命令行中的参数传递给 main方法后,保存在 main方法的字符串数组参数 args中 。 其中,命令行中的第 1个参数保存在 args [0]
中;命令行中的第 2个参数保存在 args [1]
中;,.....;依此类推 。
7.4 Java application命令行参数(续)
例 7-7 使用命令行参数
java Cal 3 + 4
java Cal 3 – 4
java Cal 3,*” 4
java Cal 3 / 4
源代码运 行运 行运 行运 行
7.5 Arrays类
7.5.1 数组的赋值和打印
7.5.2 数组的比较
7.5.3 数组的排序
7.5.4 在数组中查找
7.5.1 数组的赋值和打印
数组的赋值:
– Arrays.fill()
例:
byte[] a0=new byte[10];
Arrays.fill(a0,(byte)0);
int[] a1=new int[10];
Arrays.fill(a1,0,a1.length/2,1);
Arrays.fill(a1,a1.length/2,
a1.length,2);
7.5.1 数组的赋值和打印(续)
数组的打印输出:
–Arrays.toString()
//适用于一维数组
–Arrays.deepToString()
//适用多维数组例 7-8 数组的赋值和打印源代码 编译运行
7.5.2 数组的比较
Arrays.equals()
//适用于一维数组
Arrays.deepEquals()
//适用于多维数组例 7-9 数组的比较源代码 编译运行
7.5.3 数组的排序
Arrays.sort():
– 当数组中的元素是基本数据类型时,其大小是指元素数值的大小。
– 当数组中的元素是对象时,必须定义该类对象的比较方法。
7.5.3 数组的排序(续)
自然比较法:
– 通过实现接口 java.lang.Comparable,使某个类具有比较能力 。 接口 Comparable中只有一个方法 compareTo(),该方法有一个 Object型参数,当这个参数大于该方法所属的对象时返回负整数,等于该方法所属的对象时返回零,小于该方法所属的对象时返回正整数 。
例 7-10 数组的排序源代码 编译运行
7.5.3 数组的排序(续)
比较两个对象的大小:
– 实现了接口 Comparable的同类对象可以调用方法 compareTo()比较大小 。
例 7-11 对象的比较源代码 编译运行
7.5.4 在数组中查找
Arrays.binarySearch():
– 在已经按从小到大顺序排序的数组中查找某个元素 。 如果查找到了目标元素,该方法将返回数组中目标元素的下标值;否则,返回一个负值 。
例 7-12 在数组中查找源代码 编译运行
7.6 数组的复制
System.arraycopy():
arraycopy(Object src,int srcPos,
Object dest,int destPos,
int length)
例 7-13 数组的复制源代码 编译运行
7.6 数组的复制(续)
clone()
例 7-14 使用 clone方法复制数组源代码 运 行
7.7 习 题