什么是数组?
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。所谓数组,就是一组数,它是相同类型数据的有序集合。
数组描述的是相同数据类型的若干个数据,并按照一定的先后次序组合而成。其中,每一个数据称作一个数组元素,可以通过下标来访问元素,索引从0开始。
声明创建数组
在程序中需要使用数组,需要先声明数组。声明数组变量的语法:
dataType[] 数组名称(常用方法)
或 dataType 数组名称[]
其中,dataType为数组数据类型,可以是int,double等
// 基本类型数组示例
int[] array;
String[] array1;
数组的三种初始化方法
1、静态初始化
int[] array={1,2,3,4,5};//基本类型初始化
Dog[] dogs={new Dog(),new Dog()};//引用类型初始化
2、动态初始化
int[] nums=new int[3];
nums[1]=1;
nums[2]=2;
nums[3]=3;
3、数组的默认初始化
必须要搞明白的是,数组是引用类型,所以它其中的元素就相当于类的变量,因此,数组一旦被分配空间,那么它的元素就被隐式初始化。
int[] nums=new int[3];
System.out.println(nums[0]);
我们可以看到,nums[0]没有进行显式赋值,而在运行程序后得出为0,这就是隐式初始化的作用。从内存角度分析,当数组一旦被创建,那么在栈中就为其分配了空间,也就意味着数组元素被隐式初始化。
Java内存分析
为了更容易理解数组,接下来将对Java内存进行简单地分析
以实际例子为例讲解内存(如下图所示):
1、声明数组arr,当数组声明时,arr只是存储在栈中,此时arr便是引用对象的变量。
2、创建数组arr,此时,在堆中形成了数组arr,分配了相关内存。
3、给数组元素赋值。在分配的内存中,为数组赋值。在本例子中,若无赋值,则相关数组元素便被隐式初始化为0;
For-Each 循环
JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
语法格式如下:
for(type element: array)
{
System.out.println(element);
}
实例运行:
public class Array {
public static void main(String[] args) {
int[] num={1,2,3,4,5};
for (int i : num) {
System.out.print(i+" ");
}
}
}
以上代码编译运行结果如下:
数组作为函数的参数
数组可以作为参数传递给方法。
public class Array {
public static void main(String[] args) {
int[] arr={11,22,31,14,63};
printArray(arr);
}
public static void printArray(int[] arr){
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
代码运行结果如下:
数组作为函数的返回值
数组可以作为函数的返回值。
public class Array {
public static void main(String[] args) {
int[] arr={11,22,31,14,63};
int[] result=reverseArray(arr);
for (int i : result) {
System.out.print(i+" ");
}
}
// 实现数组元素倒置
public static int[] reverseArray(int[] arr){
int[] result=new int[arr.length];
for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
result[j]=arr[i];
}
return result;
}
}
代码编译运行结果如下:
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。多维数组的声明初始化与一位数组类似。接下来以二维数组为例,进行讲解。
二维数组的动态初始化:
type[][] typeName = new type[typeLength1][typeLength2];
实例如下:
int[][] arr = new int[2][3];
arr[0][0] = 2;
arr[0][1] = 4;
arr[0][2] = 6;
arr[1][0] = 3;
arr[1][1] = 6;
arr[1][2] = 9;
打印二维数字组例子:
public class Array {
public static void main(String[] args) {
int[][] arr = new int[2][3];
arr[0][0] = 2;
arr[0][1] = 4;
arr[0][2] = 6;
arr[1][0] = 3;
arr[1][1] = 6;
arr[1][2] = 9;
for (int i = 0; i <arr.length; i++) {//arr.length为二维数组的行数
for (int j = 0; j < arr[0].length; j++) {//arr[0].length为二维数组的列数
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
代码运行结果: