数组
数组是相同类型数据的有序集合;
描述的是相同类型的若干个数据,按照一定的先后顺序组合;
每个数据称为一个数组元素,每个数组元素可以通过一个小标来访问。
数组的特点
- 数组的长度是确定的。数组被创建后,它的大小是不可变的。
- 数组的元素必须是相同的类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,因此数组无论保存的是原始类型还是其他对象类型,数组对象本身是在队堆中的。
数组的声明及创建
必须先声明才可以使用,使用new创建数组,为其分配空间
有两种声明数组的方式:
//变量类型 变量名 = 变量值
int[] array = new int[10]; //存放十个数据
int array1[] = new int[10];
数组的初始化
//静态初始化
int[] a = {1,2,4,4};
//动态初始化 包含默认初始化
int[] b = new int[10];
a[0]=1;
a[1]=2;
...
//默认初始化
//未给b[5]赋值时,输出b[5]值为0,默认为int类型的默认值
数组的边界
数组的下标(0—length-1)
java内存分析:
声明数组是在栈中压入一个array,创建数组时为数组在堆中分配一段空间,栈中array中存储的是堆中new的数据的地址,为数组的每个元素赋值时,将数据存入堆中的空间。
多维数组
多维数组可以看成是数组的数组,数组中的元素也是数组。
二维数组是一个特殊的一维数组,其中的每个元素都是一个一维数组。
Arrays类
java.util.Arrays
其中包含用于操作数组的各种方法(排序、搜索等)。该类中还包含一个静态工厂,可以将数组看做列表。
Arrays中的方法都是static修饰的,可以直接使用类名调用。
public static void main(String[] args){
int array = {4445,2,5,788,4,16,6};
//使用fill对数组填充 将指定的值分配给指定字节数组中的每个元素
/**
* array 要填充的数组
* val 填充的值
**/
Arrays.fill(array,1); //数组的每个元素都为1
Arrays.fill(array,2,4,1); //数组下标在[2到4)之间的元素为1
//打印数组元素Arrays.toString
System.out.print(Arrays.toString(array));
//数组快速排序 升序
Arrays.sort(array);
//通过equals方法比较数组的元素值是否相同
//查找数组元素:binarySearch对排序好的数组进行二分查找法
}
稀疏数组
数组中大部分元素为0,或为同一值时,可以使用稀疏数组来保存该数组。(数据结构的思想)
处理方式:
- 记录数组一共有几行几列,有几个不同的元素
- 把具有不同值的元素的行、列、值记录在一个小规模的数组中,从而缩小程序的规模。
public static void testGobang(){
//创建一个二维数组11*11 0:没有棋子 1:黑棋 2:白棋
int[][] array1 = new int[11][11];
array1[5][2]=2;
array1[4][3]=1;
//转换为稀疏数组
//获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j]!=0){
sum++;
}
}
}
//创建一个稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0]=11; //总行数
array2[0][1]=11; //总列数
array2[0][2]=sum; //有效值个数
//输出稀疏数组
int count=0; //记录稀疏数组的行
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1.length; j++) {
if (array1[i][j]!=0){
count++;
array2[count][0]=i; //记录行
array2[count][1]=j; //记录列
array2[count][2]=array1[i][j]; //有效值
}
}
}
//打印稀疏数组
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][2]+"\t");
}
}
结果: