1、数组的概念
- 数组(Array),是多个相同类型数据按一定顺序排序的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
- 常见概念
- 数组名
- 下标(索引)``
- 元素
- 数组的长度
- 数组本身是引用数组类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据 类型
- 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
- 数组的长度一旦确定,就不能修改。
- 我们可以通过下标(索引)的方式调用指定位置的元素,速度很快。
数组的分类
一维数组的声明方式:
- type var[] type[] var
- java语言中声明数组时不能指定长度(数组中元素的数),例如:int a[5] // 非法
- 数组的初始化
- 动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行
int[] arr = new int[3];arr[0] = 3;
- 静态初始化:在定义数据的同时就为数据元素分配空间并赋值
int[] arr = new int[]{1,2,3}String[] names = {'1','2','3'}
- 数组元素的引用
- 引用方式:数组名[数组元素下标]
- 每个数组都有一个长度的属性 length
- 数组一旦初始化,长度不可变
数组元素的默认初始化值
- 数组是引用类型,元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式隐式初始化。
- 对于基本数据类型而言,默认初始值各有不同
- 对于引用数据类型而言,默认初始化值为null(与0不同)
int[] a = new int[3];System.out.println(a[3]); // 默认值为0



内存的简化结构

- 思考
定义一个数组类型的局部变量,他会存储在栈内存中,当我们new一个对象或者数组出来,数据会存储在堆内存中,赋值的操作就是通过栈中的节点去找到堆中的数据??
3、多维数组的使用
- Java语言中提供了支持多维数组的语法
- 如果是一维数组是线性关系的话,那么二维数组可以看作一个表格。
- 对于二维数组的理解,我们可以看作array1作为array2中的一个元素存在,其实从底层的运行机制来看并没有多维数组
- 二维数组的初始化
- 动态初始化1
int[][] arr = new int[3][2]
动态初始化2
int[][] arr = new int[3][];// 每个一维数组都是默认初始化值nullarr[0] = new int[3];arr[1] = new int[2];arr[2] = new int[4];
注意:int[][] arr = new int[][3];//非法
静态初始化
int[][] arr = new int[][]{{3,3},{2,1},{3,6,8}}
特殊写法 (矩阵写法)
int[] x,y[]; x是一维数组,y是二维数组
练习;
获取数组中所有元素的和;
public static void main(String[] args) {int[][] arr = new int[2][];arr[0] = new int[2];arr[0][0] = 2;arr[0][1] = 2;arr[1] = new int[2];arr[1][0] = 2;arr[1][1] = 2;int sum = 0;for (int[] x:arr){for (int y:x){System.out.print(y+",");sum+=y;}System.out.println();}System.out.println("和为"+sum);}
二维数组的打印杨辉三角
// 后续进行手打
4、数组中涉及的常见算法
- 数组元素的赋值(杨辉三角,回型数等)
- 求数值型数组元素的最大值,最小值,平均数,总和等
- 数组的反转,复制,查找(线性查找,二分法查找)
- 数组元素的排序算法
- 内部排序:所有排序都在内存中完成
- 外部排序:由多次内部排序完成
4.1 十大内部排序
- 选择排序
- 直接选择排序,堆排序
- 交换排序
- 冒泡排序,快速排序
- 插入排序
- 直接插入排序,折半插入排序,shell排序
- 归并排序
- 桶式排序
-
5、Arrays工具类的使用
操作数组的工具类,(排序,搜索)的各种方法 | boolean equals(a,b) | 判断两个数组是否相等 | | —- | —- | | String toString(a ) | 输出数组信息 | | void fill(a,int val) | 将指定值填充到数组之中 | | void sort(a) | 对数组进行排序 | | int binarySerach(a,int key) | 对排序后的数组进行二分法检索指定的值 |
6、数组使用中的常见异常
- 数组脚标越界异常(ArrayLindexOutOfBoundsException)
- 访问到了数组中不存在的脚标时发生的异常
- 空指针异常(NUllPointerException)
- arr引用没有指向实体,却操作实体中的元素时的异常
