数组


数组

数组实际上也是一种类,但是编程不可见(底层C++写的,在运行时动态创建)

一维数组

定义

例如,创建一个int类型的大小为10的数组:

int[] array = new int[10];

因此此时的array仍然是一个引用变量,与类的对象的创建相同

此时10指明的数组的大小,并且在使用过程中数组的大小不可变

也可以在创建时就赋值,但此时不能指明大小

也可以直接用大括号初始化

// 示例 1:使用 new 关键字和大括号
int[] array1 = new int[]{1, 2, 3};   //注意此时中括号里面不能填大小

// 示例 2:使用大括号直接初始化
int[] array2 = {1, 2, 3};

// 示例 3:声明数组长度,但不初始化
int[] array3 = new int[10]; // 所有元素默认为0,如果是对象就默认为null

访问

和C相同,用 [ ] 进行访问,下标同样是从0开始

方法

数组同样是继承Object类,具有一些方法

数组类中重写了clone方法,可以直接克隆数组。但是未重写equals,toString方法,因此不能通过equals方法直接对两个数组进行比较

  • 获得数组大小: .length 注意后面不加括号!!!这相当于是数组的一个属性

在方法中的形参中,数组也要加上括号

例如,在Main中提供一个数组比较的equals方法:

public static boolean equals(int[] a,int[] b){  //注意因为main方法为static,因此新定义的方法也要是static的
       if(a.length!=b.length)return false;
       for (int i = 0; i < a.length; i++) {
          if(a[i]!=b[i])return false;
       }
       return true;
    }

for遍历数组的简化写法(foreach语法)

int[] arr = {1,2,3};
for(int c : arr){
	sout(c);
}

实际上编译后还是转化为经典的for循环

注意

  1. 对于基本类型的数组来说,是不支持自动装箱和拆箱的:即不能将一个基本类型的数组引用直接赋值给其包装类数组引用变量:
int[] arr1 = {1,2,3};
Integer[] arr2 = arr1;
  1. 由于基本数据类型和引用类型不同,所以说int类型的数组时不能被Object类型的数组变量接收的:
int[] arr = new int[10];
Object[] array = arr;

但如果是引用类型就可以,支持向上转型和向下转型:

String[] arr = new String[10];
Object[] array = arr;  //向下转型

Object[] arr = new String[10];
String[] array = (String[]) arr;
  1. 如果定义数组时使用了 final ,其含义是引用变量只能指向所创建的数组,而不能指向别的数组,并不是数组的值不能改变
final int[] array = new int[]{1,2,3};
array[0] = 100;  //可以改变
array = new int[]{4,5,6};  //错误

多维数组

定义

要创建几维,就在后面加几个 [ ]

int[][] array = new int[2][10]; //创建一个2×10的数组,2为两个一维数组(2行)

当然,也可以提前赋值:

int[][] array = new int[][]{ {1,2,3,4},
														 {5,6,7,8}  };

这里要注意的是,多维数组创建出来的变量同样是一个引用变量,因此可以直接对其中的一维数组做出改变:

int[][] array = new int[][]{ {1,2,3,4},
														 {5,6,7,8}  };
array[0] = new int[]{0,0,0,0};   //注意先new,不能在原数组基础上改

遍历

注:

Java中的多维数组的每一维的数组长度可以不相同,当你创建一个二维数组(实际上是数组的数组),你可以存储一维数组,它们的长度可以不同。与C语言不同,Java不会在短的一维数组后自动创建元素来填充它。这意味着你可以创建一个不规则的(或称为”锯齿形”)二维数组。

以二维数组的遍历为例:

int[][] arr = { {1,2,3,4},{5,6,7,8} };
for(int i = 0 ; i < arr.length ; i++){
	for(int j = 0 ; j < arr[i].length ; j++){
		print(arr[i][j]+" ");
	}
	println();
}

Author: havenochoice
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source havenochoice !
评论
  TOC