title: 数组的本质 与基础使用 下标 遍历 存取
date: 2022-10-23 15:59
数组
定义
数组是有序的元素序列
格式
1.数组需要存储的数据类型[] 数组对象变量名=new 数据类型[length];
例如:int[] arr=new int [10];
这里 10 是该数组的长度即,对于这个一维数组,它一共可以放 10 个元素
2.数组所需要的存储的数据类型[] 数组对象变量名={元素 1,元素 2,元素 3……};
例如:String[] strArr={“原图”,“马赛克”}
这里是直接放入了元素,在这个数组中有两个元素即“原图”,“马赛克”
属性和特征
属性:每一个数组都只有一个属性,也就是它的 length(长度),即其存储元素的个数
特征——下标:从数组的第一个空间(以 0 为下标)开始,计数从 0 依次递增,由此最大下标=length-1
而这个下标就是该元素的特征,用于定位操作数组的空间
对数组的操作
存
数组名[下标]=元素
例如:int[] arr=int [10];
arr[10]=100;//这就是错误的,10>9(最大下标),不在范围内,数组越界了
取
存储类型 变量名=数组名[下标];
例如:int n=arr[9];
遍历
即用循环的方式,对数组中的每一个数进行存取,经历每一个数
例如:
int[] arr=new int[7];
for (int i = 0; i <arr.length ; i++) {
arr [i]=i+1;
System.out.print(" "+arr[i]);
}
得出结果
1 2 3 4 5 6 7
例子
实现将 1,100,10000,1000000 等 10 个数存入数组 arr,并打印出来,且单独取出第 2个和第 3 个元素相加
public class Arr {
public static void main(String[] args) {
//这是在规定数组的长度
int[] arr=new int [10];
//这是利用循环将数据存入数组
for (int i = 0; i <arr.length ; i++) {
if (i==0){
arr[i]=1;
}else {
arr[i]=arr[i-1]*100;
}
System.out.println(arr[i]);
}
//这里是在取出第 2 和第 3 个元素,第几个元素的下标是几减去一
int n2=arr[1];
int n3=arr[2];
System.out.println(n2+"+"+n3+"="+(n2+n3));
}
}
则会输出结果
而这里为什么会输出负数呢?
这是因为我们设定的数据类型是 int,只有 32 bit,当数据太大就超出了 int 的储存范围就只能存储这个数二进制码的后 32 位,而 int 是一个有符号的数据类型,当最高位是 1 时就默认这是负数存入
数组的本质
任何维度的数组都是一维的
虽然我们常说一维数组二维数组三维数组但是本质上数组都是一维的
我们可以通过对 int[][]解释来说明该观点
首先对于[],它只是表示数组的标识,不能成为数据类型
其次我们知道数据分为基本数据类型和引用数据类型,那么 “int[]”就可以成为一个引用数据类型
然后对于数组有格式(数据类型)[] 数组名,也就是说 int[][]可以视为(int[])[]
所以对于 int[][]数组,[]是唯一的
例如:解释 int[][] arr=new int[2][9];
这是一个长度为 2 的数组,这个数组中的每个元素是长度为 9 的数组
如果要取出其中的值
可以直接取出:int n =arr[第几个元素][中的第几个元素]
也可以先取出一个数组元素,然后在将该数组元素作为一个数组来取出元素
//先写一个二维数组
int[][] arr2=new int[2][9];
for (int i = 0; i <arr2.length ; i++) {
for (int j = 0; j <arr2[i].length ; j++) {
arr2[i][j]=i+j;
System.out.print(arr2[i][j]);
}
System.out.println();
}
这里为了方便观察,我将其输出为一个矩阵,
这里的输出结果
然后在来取出数据
//用直接取出的方法
System.out.println(arr2[1][2]);
//将数组元素取出成为数组,再取数
int[] arr2_1=arr2[1];
int n=arr2_1[2];
System.out.println(n);
这样就得到结果