Java基础学习笔记(五)—— 数组
Life was like a box of chocolates, you never know what you’re gonna get.
| @Author:TTODS
一维数组
当数组中每个元素都只带一个下标时,这种数组就是“一维数组”。数组是引用数据类型,引用数据类型在使用之前一定要做两件事情:声明和初始化。
一维数组的声明
java中变量声明有两种方式
int[] nums1; //元素数据类型[] 数组变量名
int nums2[]; //元素数据类型 数组变量名[]
值得注意的是:①在java中给推荐使用第一种方法,因为其更符合面向对象的思想,将元素数据类型[]
看作是一个整体类型,即数组类型。而后者常用于C等语言的数组声明。②数组声明完成后,JVM还没有给元素分配内存空间。
初始化
数组初始化的过程就是为数组的每一个元素分配内存空间,并为每一个元素提供初始值。初始化之后数值的长度就确定下来不能变化了。
值得注意的是:①有些计算机语言虽然提供了可变类型数组,它的长度是可变的,这种数组本质上是创建了一个新的数组对象,并非是原始数组的长度发生了变化
静态初始化
已知数组的长度及数组中每个元素的值时,可以使用数组的静态初始化。
int[] nums = {1,2,3,4,5,6,7};//数组的静态初始化用{value1,value2,value3···}的形式初始化数组。
for(int num:nums) {
System.out.print(num+" ");
}
输出:
1 2 3 4 5 6 7
动态初始化
用new运算符分配指定长度的内存空间
int[] nums = new int[20]; //为nums数组 分配可以存放20个int数据的内存空间
nums[0] = 1;
System.out.printf("%6d ",nums[0]);
for(int i=1;i<20;i++) {
nums[i] = 2*nums[i-1];
System.out.printf("%6d ",nums[i]);
if(i==9) System.out.println();
}
输出
1 2 4 8 16 32 64 128 256 512
1024 2048 4096 8192 16384 32768 65536 131072 262144 524288
值得注意的是:我们用new为数组分配了内存空间后,在赋值前,数组的元素内容是数组类型的默认值,例如int
类型的默认值是0
int[] nums = new int[20]; //为nums数组 分配可以存放20个int数据的内存空间
for(int i:nums)
System.out.printf("%3d ",i);
输出
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
其他类型的默认值如下表:
基本类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘\u0000’ |
boolean | false |
引用 | null |
多维数组
多维数组实际上是一维数组的特殊情况,即一维数组的每个元素都是数组。比如二维数组的每个元素都是一个一维数组。
下面以二维数组为例:
二维数组的声明:
int[][] intArray0;
int[] intArray1[];
int intArray2[][];
二维数组的初始化:
静态初始化
//二维数组的静态初始化
int[][] intArray = {
{1,2,3,4},
{2,3,4,1},
{3,4,1,2},
{4,1,2,3}};
//二维数组的遍历,注意第一层循环里元素类型是int[]
for(int[] nums :intArray) {
for(int num:nums)
System.out.printf(" %d ",num);
System.out.println();}
}
输出:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
动态初始化
int[][] intArray = new int[4][4];
for(int i =0;i<4;i++) {
for(int j=0;j<4;j++) {
intArray[i][j] = i+j;
System.out.printf(" %d ",intArray[i][j]);
}
System.out.println();
}
输出:
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
不规则数组
因为多维数组是数组的数组,但是子数组的长度可以不一样,于是就有了不规则数组。
int Array[][] = {
{1},
{1,1},
{1,1,1},
{1,1,1,1}};
for(int[] nums:Array) {
for(int num:nums)
System.out.printf(" %d ", num);
System.out.println();
}
输出
1
1 1
1 1 1
1 1 1 1
用for-each语句遍历不规则数组是不错的选择