前言
本讲继续讲解了Java的基础语法,数据结构数组,数组也是Java很多数据结构的一个重要部分之一,一般开发中其实很少使用数组,反而用相关集合类,比如List和ArrayList,这些性能以及对应的api调用比数组丰富,我们后续慢慢也会讲解和使用这些集合类。
一、数组是什么
数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式
对这些数据进行统一管理。
比如,有一组学生,这样的一组数据,就可以看成数组。
我们如果需要获取这个学生数组的数据,就可以,通过序号,直接获取。其实在Java数组结构一些常见概念: 数组名 == 学生 下标(或索引) == 序号 元素 == 学生名字 数组的长度
数组的分类:
- 按照维度:一维数组、二维数组、三维数组、…
- 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
二、一维数组
一维数组,比较容易理解,我们可以利用几何知识来解释,一维指的是行,算是比较简单的数组。
1.声明
type var[] 或 type[] var ,type表示数据类型,可以基本数据类型,也可以引用对象数据类型。
例如:
int a[];
int[] a1;
double b[];
String[] c; //引用类型变量数组
数组声明的时候,是不能指定数组的长度的,同时idea开发工具也会提示
2.初始化
所有变量都会初始化,数组也是不例外的,可以声明和初始化一起,也可以先声明,再初始化,数组初始化的时候需要指定数组的长度。
数组初始化,用关键字 new type[长度],java在内存就会分配指定长度的数组,数组的下标(序号)范围是0 到 长度 - 1。
如声明并初始化一个长度为 3 的int类型数组
int[] arr = new int[3];
先声明,后初始化:
String names[];
names = new String[3];
2.数组元素引用
**数组赋值:**数组赋值,需要指定对应的序号进行赋值,相当于放到对于的坑位。
String names[];
names = new String[3];
names[0] = "小明";
names[1] = "小红";
names[2] = "小张";
最终这个数组在内存中的存储结构如下:
**数组元素获取:**数组名[数组元素下标]
- 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
- 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
获取数组第一个元素
如果获取的序号超过数组定义的长度,则会报错:
三、多维数组
多维数组,利用几何知识来解释,一维指的是行,二维是面,三维是体,其实在工作中很少会用到多维数组去存储,这一部分可以作为了解,知道有这么一回事。
1.多维数组的使用
上面我们知道一维数组使用的是一个中括号[],那么多维就使用多个,比如二维数组使用的是两个中括号[][],第一个表示横向数据(行),第二个表示纵向数据(列)。比如我们定义一个表格,如三行两列的表格
用二维数组定义的话,如下:
String students[][];
// 定义 3行,2列的数据
/**
* (0,0)小明 (0,1)16
* (1,0)小红 (1,1)17
* (2,0)小张 (2,1)18
*/
students = new String[3][2];
students[0][0] = "小明";
students[1][0] = "小红";
students[2][0] = "小张";
students[0][1] = "16";
students[1][1] = "17";
students[2][1] = "18";
所以二维数组作为表格存储,只不过,行竖是从 0 开始,获取二维数组对应元素如下:
// 获取第一行,第二列,也就是(0,1)
System.out.println("第一行,第二列:"+students[0][1] );
// 遍历数组所有元素
for (int i = 0; i < students.length; i++) {
for (int j = 0; j < students[i].length; j++) {
System.out.println("第"+i+"行"+"第"+j+"列:"+students[i][j] );
}
}
四、关于数组常见练习题
本讲内容其实不是很多,初学者主要熟悉一维数组的使用即可,接下来我们用两道练习题,来巩固一下对于数组的理解。
1.定义一个int型的一维数组,包含10个元素,分别赋一些随机整数, 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
public static void main(String[] args) {
/*
* 1.定义一个int型的一维数组,包含10个元素,分别赋一些随机整数, 然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
* */
int arr[] = new int[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
arr[5] = 6;
arr[6] = 7;
arr[7] = 8;
arr[8] = 9;
arr[9] = 10;
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max){
max = arr[i];
}
}
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min){
min = arr[i];
}
}
/*
2.获取arr数组中所有元素的和(自定义1到10的数组)
* */
int sum=0;
for (int i = 0; i < arr.length; i++) {
sum =sum+arr[i];
}
System.out.println("数组arr之和:" + sum);
System.out.println("数组arr最大值:" + max);
System.out.println("数组arr最小值:" + min);
System.out.println("数组arr平均值:" + sum / arr.length);
}