5.8 操作动态数组

  Java在创建数组的时候,需要指定数组长度,且数组长度不可变。而java.lang.reflect包下提供了一个Array类,这个类中包括一系列static方法,通过这些方法可以创建动态数组,对数组元素进行赋值、取值操作。

  Array类提供的主要方法(均为静态方法)如下。

  • Object newInstance(Class componentType, int length)

  创建一个具有指定元素类型和长度的新数组。

  • Object newInstance(Class componentType, int… dimensions)

  创建一个具有指定元素类型和维度的多维数组。

  • void setXxx(Object array, int index,xxx val)

  将指定数组对象中索引元素的值设置为指定的xxx类型的val值。

  • xxx getXxx(Object array, int index)

  获取数组对象中指定索引元素的xxx类型的值。

5.8.1 操作一维动态数组

  假设有这样的需求,每个班需要用一个字符串数组来存该班所有学生的姓名,但每个班的学生人数不一样,需要每个班的班主任在开学前统计该班班级人数后填入系统中,才能确定这个数组的长度,这就需要使用动态数组,并且需要根据指定学号输入学生姓名,添入数组中,具体代码如下:

  1. import java.util.Scanner;
  2. import java.lang.reflect.*;
  3. public class TestArray{
  4. public static void main(String args[]) {
  5. try {
  6. Scanner input = new Scanner(System.in);
  7. Class c = Class.forName("java.lang.String");
  8. System.out.print("请输入班级人数:");
  9. int stuNum = input.nextInt();
  10. //创建长度为stuNum的字符串数组
  11. Object arr = Array.newInstance(c,stuNum);
  12. System.out.print("请输入需要给学号为?的学生输入姓名:");
  13. int stuNo = input.nextInt();
  14. System.out.print("请输入该学生姓名:");
  15. String stuName = input.next();
  16. //使用Array类的set方法给数组赋值
  17. Array.set(arr, (stuNo-1), stuName);
  18. //使用Array类get方法获取元素的值
  19. System.out.println("学号为" + stuNo + "的学生姓名为:" + Array.get(arr,(stuNo-1)));
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }

  编译、运行程序,运行结果如图5.14所示。

5.8 操作动态数组 - 图1


图5.14 使用Array类创建动态数组

5.8.2 操作多维动态数组

  使用Array类创建一个多维动态数组的方法为newInstance(Class componentType, int… dimensions),其中dimensions参数是表示新建数组维度的int数组。例如,想创建一个三维数组,维度分别为8、10、12,则需要定义一个长度为3的整型数组(int[] d = {8,10,12}),再通过这个整型数组创建三维数组。

  下面的代码创建了一个8×10二维整型动态数组,并给数组下标为[4][6]的数组元素赋值为20,具体代码如下:

  1. import java.lang.reflect.*;
  2. public class TestArray2{
  3. public static void main(String args[]) {
  4. try {
  5. Class c = Integer.TYPE;
  6. //创建一个8×10二维整型数组
  7. int dim[] = {8,10};
  8. Object arr = Array.newInstance(c,dim);
  9. //arr4为一维数组
  10. Object arr4 = Array.get(arr,4);
  11. //给arr[4][6]赋值为20
  12. Array.set(arr4, 6, 20);
  13. //获取arr[4][6]的值
  14. System.out.println("arr[4][6]的值为:" + Array.get(arr4,6));
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }

  在介绍数组的时候提到过,二维数组可以先理解为一个一维数组,这个一维的每个数组元素又是一个一维数组。代码中Array.get(arr,4)语句获取下标为4的数组元素arr4,这个数组元素就是一个一维数组,再通过Array.set(arr4, 6, 20)语句设置arr4这个一维数组下标为6的数组元素的值为20,即完成了设置arr[4][6]的值为20的目的。编译、运行程序,输出结果为20。