目录
1.数组的定义
数组是最简单的数据结构。
【数据结构本身就是来描述和组织数据的(数据+结构)】
数组,是指组织一组类型相同的数据的集合,数组中的每个元素称为元素。数组可以存放任意类型的元素,但同一个数组里存放的元素必须一致。
数组的空间是连在一起的,创建数组时就开辟了一段连续的内存,每个空间都有自己的编号,起始位置是0,即数组的下标。
分为一维数组和二维数组。
2.一维数组
2.1一维数组的动态初始化
定义:在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式。
第一种方法:
数据类型[ ] 数组名 = null;
第二种方法:
数据类型[ ]数组名;
数组名 = new 数据类型[长度];
简写:(可以写在一行)
数据类型[ ]数组名 = new 数据类型[长度];
不同数据类型的数组元素的默认初始值
数据类型 | 默认初始值 |
byte,short,int,long | 0 |
float,double | 0.0 |
char | 一个空字符,即‘\u0000’ |
boolean | false |
引用数据类型 | null,表示变量不引用任何对象 |
例题:
public static void main(String[] args) {
int [] arr1;
arr1 = new int[100];
double [] arr2 = new double[50];
System.out.println(arr2[0]);
System.out.println(arr1[0]);
}
tip:
动态初始化时一定要写长度,否则会编译出错。
数组的变量不是数组的拥有者,而是数组的管理者。(numbers和n2指向同一个地址,所以改了n2也相当于改变了numbers。)
public static void main(String[] args) { int [] numbers = {1,2,3,4};//数组长度定义后不能改变 System.out.println(numbers[0]);//1 int [] n2 = numbers; n2[0] = 100; System.out.println(numbers[0]);//100 }
2.2一维数组的静态初始化
定义:在定义数组的同时就为数组的每个元素赋值。
数据类型 [ ] 数组名 = new int [ ]{元素,元素,.....};
简写:(更加简便)
数据类型 [ ] 数组名 = {元素,元素,.....};
tip:采用静态初始化的方式为每一个元素赋值时,不需要写长度,否则编译器会报错。
原因:编译器会认为数组限定的元素个数与实际存储的元素个数有可能不一致,存在一定的安全隐患。
例:int[ ] x = new int[4]{1,2,3,4};//这种写法就是错误的
[是数组,D是数组里面的数据类型,@14ae5a5是“地址“:对象的”地址“,对象在堆上的地址的哈希值。
”例:
double [] arr3 = new double[]{11,22};
double [] arr4 = {11,22,33};
2.3数组的常见操作
2.3.1数组的遍历
1.for循环的遍历
int []arr = {1,2,5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
2.for-each循环的遍历
int [] numbers = {1,5,8,11};
for (int k : numbers){//k为下标
System.out.println(k);
}
3.将数组转换为字符串进行输出
int[] array = {1,2,3,4};
String ret = Arrays.toString(array);
//Arrays是操作数组的一个工具类
//toString是Array的一个方法
System.out.println(ret);
2.3.2最值的获取
首先假设num[0]为最大值,遍历数组num,只要遇到比它大的数就把该元素的值赋值给max,这样,循环结束时就可以得到数组的最大值了。
tip:不能初始化最大值为0,因为该数组的最小值有可能为负数。
int []num = {1,3,5};
int max = num[0];
int min = num[0];
for (int i = 0; i < num.length; i++) {
if (max<num[i]){
max = num[i];
}
if (min>num[i]){
min = num[i];
}
}
System.out.println("最大值"+max);
System.out.println("最小值"+min);
2.3数组的两种异常
2.3.1数组越界异常
int arr[] = new int[3]; System.out.println(arr[3]);
arr数组的索引范围是0-2,使用索引3访问元素时超出了数组的索引范围。
2.3.2空指针异常
在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常。
只要使用数组就必须创建内存,否则就会出现空指针异常(数组名就是一个引用变量,可以理解为指向实际内存的指针)
arr = null; System.out.println(arr[2]);
3.二维数组
3.1二维数组的定义
在数组中嵌套数组,即数组的元素是一个数组。
第一种:
数据类型[ ][ ] 数组名 = new 数据类型[行的个数][列的个数 ];
int [ ] [ ] arr = new int [3] [2];
第二种:数组中每个元素的长度不确定。
数据类型[ ][ ] 数组名 = new 数据类型[行的个数][ ];
int [ ] [ ] arr = new int [2] [];
第三种:
数据类型[ ][ ] 数组名 = {{第0行初始值},{第1行初始值},{第2行初始值},...,{第n行初始值}};
int [ ] [ ] arr ={{1,2,3},{2,5},{1}};