12.8 数组、稀疏数组

数组

定义一个数组

类型[] 数组名 = 初始化

内存分析

声明是声明在栈区

堆区储存new出来的对象

 

 

初始化

  1. 静态初始化 (不进行初始化每个int型数组中的元素默认初始化为0,char 为\u0000 空格的Unicode码,String型为null,boolean 为false,float double 为0.0)

    int[] a = {1,2,3,4};
  2. 动态初始化 先声明一个数组,后在使用该数组或数组中的某个元素时在赋值

    int[] a=new int[100];
    ...
    ...
    a[0] = 100;

     

 

 

 

 

数组的特点

  1. 长度确定,无法更改

  2. 元素必须为相同的类型

  3. 数组可以为任意类型,包括基本类型和引用类型

  4. 数组变量属引用类型,数组可以看作为对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,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;
arr2[count][2] = arr1[i][j];
}
}
}
//输出压缩后的数组
for(i=0;i<arr2.length;i++)
{
for(j=0;j<arr2[i].length;j++)
{
System.out.print(arr2[i][j]+" ");
}
System.out.println();
}
//还原数组
System.out.println("还原数组:");
int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
for(i=1;i<arr2.length;i++)//只遍历压缩数组的行,只有三列
{
arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2];
}
//输出原数组
for(i=0;i<arr3.length;i++)
{
for(j=0;j<arr3[i].length;j++)
{
System.out.print(arr3[i][j]+" ");
}
System.out.println();
}
}

输出结果:

 

 

posted @   张满月。  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示