数组
1.数组的定义
数组就是用来存储一批同类型数据的内存区域(可以理解成容器)。
使用数组的原因:
- 没有数组:存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关系和规律。想访问所有的变量,就比较困难。
- 有了数组:只需要有一个数组容器的名称,容器里面有通过数字表示的位置。位置的数字有规律。可以通过容器名称结合位置数字的方式,访问到某个变量。非常容易的访问所有的变量。通过有规律的索引,来访问没有规律的元素。
数组的定义:
- 元素的数据类型[] 数组名称 = new 元素的数据类型[数组容器的大小]//首选方法
详细解释:
- 元素:数组中的数据、数组中的变量
- 元素的数据类型:数组中的数据的数据类型,用于决定每个空间的大小
- []:表示是一个一维数组
- 数组名称:数组本身也是一个变量,用于存储数组的地址变量。
- =:赋值符号,将数组的地址,赋值给数组的名称
- new:用于在堆内存中开辟空间
- 元素的数据类型:和前面的数据类型保持一致
- 数组容器的大小:可以存储的数据的个数
2.数组的初始化
为数组分配内存空间,并且赋值
分类:动态初始化、静态初始化
-
动态初始化:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
-
元素的数据类型 [] 数组名称 = new 元素的数据类型[数组元素的个数];
-
元素的赋值方式:
数组名称[元素的索引]=元素值; -
索引:
元素在数组中的位置的数字,别名:下标、角标、脚标;从0开始 -
注意事项:
所有的元素,都需要逐个赋值
如果数组中的元素,没有赋值,元素也有一个默认的初始化值,整数为0
-
-
静态初始化:定义数组的时候直接给数组赋值
- 元素的数据类型[] 数组名称 = new 元素的数据类型[]{元素值的罗列};
- 注意事项:
第二个方括号中,不要填写数组元素的个数
元素值的罗列,元素和元素之间,使用逗号分隔。写了几个元素,就分配多大空间。
罗列出来的元素值,数据类型必须和声明的数组元素的数据类型一致
静态初始化有一个简写格式: 元素的数据类型[]数组名称={元素值的罗列};
获取数组的长度:数组名.length()

3.数组的异常
数组索引越界异常
-
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:3
数组下标越界异常 -
原因:访问了数组中,不存在的索引。数组索引的范围是0~长度-1,超过了这个范围都是越界
-
避免:不要访问不存在的索引
空指针异常
- Exception in thread "main" java.lang.NullPointerException
空指针异常 - 原因:当引用不再指向任何的堆内存中的数据时,仍要通过这个引用访问堆内存中的数据,只能抛出异常
- 避免:在使用引用前,可以先判断是否为null,不为null的时候去访问
4.数组的四个基本特点
数组的四个基本特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象 类型,数组对象本身是在堆中。
5.数组的遍历
for-each循环
for(数据类型 元素名称 : 数组名){
循环体
}
数组作为方法入参
方法名(数据类型[] 数组名){
方法体
}
数组作为返回值
return 数组名
import java.util.Random;
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) {
//生成一个长度为5的随机数数组,猜数组中的数字,猜对一个,将整个数组输出
int[] nums = new int[5];
Random rd = new Random();
Scanner sc = new Scanner(System.in);
for (int i = 0; i < nums.length; i++) {
nums[i] = rd.nextInt(20) + 1;
}
OUT :
for (; ; ) {
System.out.println("请输入数字:");
int num = sc.nextInt();
for (int j = 0; j < nums.length; j++) {
if (nums[j] == num){
System.out.println("恭喜你,猜对了");
break OUT;
}
}
}
System.out.println("数组为:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}
输出结果:

数组排序技术:
- 冒泡排序(每次从数组中找出最大值放在数组的最后面去)
- 选择排序
- 快速排序
- 插入排序
数组搜索技术:
- 二分搜索
- 分块查找
- 哈希表查找
6.多维数组

7.Arrays类
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作

浙公网安备 33010602011771号