数组(Array),是多个相同数据类型按照一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
数组的长度一旦确定,就不能修改。可以通过下标(或索引)的方式调用指定位置的元素。
数组按照维度可分为一维数组、二维数组、三维数组......等,按照元素的数据类型分为基本数据类型的数组、引用数据类型的数组(即对象数组)。
一维数组
java中声明数组时不能指定其长度(数组中元素的数),例如,int a[5] 即是非法的。
数组的初始化可分为动态初始化和静态初始化,动态初始化是指数组声明且为数组元素分配空间与赋值的操作分开进行,静态初始化是指在定义数组的同时就为数组元素分配空间并赋值。
要想通过下标引用数组中的每个元素,必须在定义数组并使用运算符new分配空间之后,即只有在 int a[] = new int[5] 后才可以使用a[0] 调用数组中的元素。
数组元素的下标从0开始,长度为n的数组下标的取值范围为0到n-1。每个数组都有一个属性length指明它的长度,但数组一旦初始化,其长度就不能改变了。
数组元素的默认初始化值
数组元素类型 | 元素默认初始值 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | 0或写为:'\u0000'(表现为空) |
boolean | false |
引用类型 | null |
多维数组
java语言中提供了支持多维数组的语法。对于典型的多维数组之一——二维数组来说,我们可以将其看成是一维数组array1又作为另一个一维数组array2的元素而存在。从数组底层的运行机制来看,其实并没有多维数组。
定义格式:int [][] arr = new int[3][2],int[][] arr = new int[3][]是合法的,而int[][] arr = new [][3]则是非法的。
数组中涉及的常见算法
数组中涉及的典型算法:数组元素的赋值(杨辉三角、回形数等)、求数组元素中元素的最大值、最小值、平均数、总和等、数组的复制、反转、查找(线性查找、二分法查找等)、数组元素的排序算法等。
数组的排序算法通常的目的是快速查找,而衡量排序算法的优劣通常从三个方面进行:时间复杂度(分析关键字的比较次数和记录的移动次数)、空间复杂度(分析排序算法中需要多少辅助内存)、稳定性(若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的)。
排序算法可分为内部排序和外部排序。内部排序是指整个排序过程不需要借助于外部存储器(如磁盘),所有排序操作都在内存中完成,外部排序是指参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器。外部排序常见的是多路归并排序,也可以认为外部排序是由多次内部排序组成。
十大内部排序算法:选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、插入排序(直接插入排序、折半插入排序、shell排序)、归并排序、桶式排序、基数排序等。
排序算法性能对比
Arrays工具类的使用
java.util.Arrays类为操作数组的工具类,包含了用来操作数据的各种方法。例如,Arrays类的sort()方法提供了数组元素排序功能。
java.util.Arrays类中包含的方法
方法名 | 参数列表 | 方法说明 |
asList | T... a | 泛型方法,返回指定数组的列表视图 |
binarySearch | byte[], byte等 | 拥有多个重载方法,对排序后的数组进行二分法检索指定的值。 |
copyOf | boolean[],int等 | 多个重载方法,复制指定的数组 |
copyOfRange | boolean[],int,int等 | 多个重载方法,将指定数组的指定范围复制到新数组中。 |
deepEquals | object[], object[] | 判断多维数组是否相等 |
deepHashCode | object[] | 用于返回多维数组的哈希值。 |
deepToString | object[] | 返回指定的阵列。如果数组包含其他数组作为元素,则字符串表示包含其内容等。这种方法是设计用于将多维数组转换为字符串。 |
equals | boolean[],boolean[]等 | 多个重载方法,判断两个数组是否相等 |
fill | boolean[],boolean等 | 多个重载方法,将指定值填充到数组之中。 |
hashCode | boolean[]等 | 多个重载方法,返回基于指定数组内容的哈希代码 |
sort | byte[]等 | 多个重载方法,对数组进行排序。 |
toString | byte[]等 | 多个重载方法,输出数组信息。 |