一、什么是数组
数组可以存放多个同一类型的数据,数组本身也是一种数据类型,不同于int这类的基本数据类型,数组是引用数据类型。可以将数组理解为一组数据。
数组使用的注意事项:
- 数组是为方便实现多个相同类型数据的统一管理而构建的组合。
- 数组中的元素可以是任何类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,则为默认值:byte 0;short ;int 0;long 0;float 0.0;double 0.0;char \u0000;boolean false;String null。
- 使用数组的步骤:1.声明数组并开辟空间;2.给数组的各个元素赋值;3.使用数组。
- 数组的下标是从0开始的。
- 数组下标必须在指定的范围内使用。
- 数组的类型是引用类型,数组型数据是一个对象。
二、一维数组的赋值机制
int n1 = 10;
int n2 = n1;
n2 = 80;
System.out.println("n1" + n1);//10
System.out.println("n2" + n2);//80
像int这样的基本数据类型赋值,赋值方式是值拷贝,也就是说在上个例子中,只是将n1所存储的值拷贝给n2,n2的改变对n1没有任何影响。
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10;
而数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值,arr2的变化会影响arr1。
Java中数组可以在内存中这样体现,数组指向内存中的一个地址,arr2 = arr1 是将arr1指向的地址赋给arr2,两个数组指向同一块地址空间,一方的修改必然影响另一方。
所以要将一个数组拷贝到另一个数组又需要将它们隔离开的方法是:
int[] arr1 = {1,2,3,4,5}
int[] arr2 = new int[arr1.length];
for(int i = 0; i < arr1.length; ++i)
{
arr[2] = arr[1];
}
三、一维数组的使用
一维数组声明方式有:int[] x 或者 int x[]。
3.1动态初始化
基本语法:
数据类型 数组名[] = new 数据类型[大小]
int a[] = new int[5];//创建了一个整型数组,名字为a,存放五个int类型的元素。
int[] a = new int[5];//也可以这样写。
或者先声明,以后再创建数组。
int[] a;
a = new int[5];
数组使用数组名[下标/索引]的方式进行使用,比如:访问a数组的第3个元素 a[2]。
Scanner sc = new Scanner(System.in);
//声明并开辟空间
int[] arr = new int[5];
//赋值
for(int i = 0; i < arr.length; ++i)
{
arr[i] = sc.nextInt();
}
//打印
for(int i = 0; i < arr.length; ++i)
{
System.out.println(arr[i] + "\t");
}
3.2静态初始化
基本语法:
数据类型 数组名[] = {元素,元素,...,元素}
int a[] = {1,2,3,4,5,6,7};
相当于
int a[] = new int[7];
a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4;
a[4] = 5; a[5] = 6; a[6] = 7;
四、二维数组
Java中除了一维数组以外,还有二维数组。从定义形式上看int[][],也可以这样理解,原来的一维数组中每个元素就是一个一维数组。
4.1二维数组的使用
二维数组声明方式有:int[][] y或者 int[] y[]或者int y[][]。二维数组实际上由多个一维数组构成,它的各个一维数组的长度可以相同,也可以不相同。比如:map[][]是一个二维数组,int map[][] = {{1,2},{3,4,5}},map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组,我们也称为列数不等的二维数组。
int[][] arr = new int[3][];//可以这样定义二维数组,其中的每个一维数组可以不是同样大小的。
for(int i = 0; i < arr.length; ++i){//遍历每个一维数组
//给每个以为数组开空间 new
//如果没有给一维数组开空间,那么arr[i]就是null
arr[i] = new int[i+1];
遍历每个一维数组,并给一维数组的每个元素赋值。
for(int j = 0; j < arr[i].length; ++j){
a[i][j] = i + 1;
}
}