12.8 数组、稀疏数组
定义一个数组
类型[] 数组名 = 初始化
声明是声明在栈区
堆区储存new出来的对象
初始化
-
静态初始化 (不进行初始化每个int型数组中的元素默认初始化为0,char 为\u0000 空格的Unicode码,String型为null,boolean 为false,float double 为0.0)
int[] a = {1,2,3,4};
-
动态初始化 先声明一个数组,后在使用该数组或数组中的某个元素时在赋值
int[] a=new int[100];
...
...
a[0] = 100;
数组的特点
-
长度确定,无法更改
-
元素必须为相同的类型
-
数组可以为任意类型,包括基本类型和引用类型
-
数组变量属引用类型,数组可以看作为对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中的对象在堆区中,因而数组对象本身也在堆区中。
稀疏数组
若某个二维数组中存在很多个相同的元素,可以采用压缩数组的方式来储存非相同的数组元素,同时节省空间。
压缩数组只有三列,第一行第一列的元素用来储存原数组的行数,第一行第二列用来储存原数组的列数,第一行第三列用来储存原数组的非相同元素的个数。代码如下:
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[][] arr1 = new int[5][6];
int i=0,j=0;
arr1[1][2] = 1;
arr1[2][3] = 2;
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
System.out.print(arr1[i][j]+" ");
}
System.out.println();
}
System.out.println("压缩后的数组:");
int[][] arr2 = new int[3][3];//新数组的行数为原数组非零值的个数加一
arr2[0][0] = 5;//压缩后的数组第一行第一列记录原数组的行数
arr2[0][1] = 6;//第一行第二列记录原数组的列数
arr2[0][2] = 2;//第一行第三列记录原数组一共有多少个非零值
int count=0;
for(i=0;i<arr1.length;i++)
{
for(j=0;j<arr1[i].length;j++)
{
if(arr1[i][j]!=0)
{
count++;
arr2[count][0] = i;
arr2[count][1] = j;