import java.io.IOException;
public class SparseArrayTest {
public static void main(String[] args) {
int[][] oraginArray=new int[5][4];
oraginArray[1][2]=1;
oraginArray[2][3]=2;
System.out.println("原始的二维数组");
for(int i=0;i<oraginArray.length;i++) {
for(int j=0;j<oraginArray[i].length;j++) {
System.out.printf("%d\t",oraginArray[i][j]);
}
System.out.println();
}
try {
System.in.read();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("将二维数组转成稀疏数组");
/*第一步:遍历原数组,找出原数组中非零的数的个数,记为sum
* 第二步:初始化稀疏数组,它有3列,sum+1行。
* 第三步:在第0行中填入原始数组的行数,列数,非零元素的个数
* 第四步:依次在下面的每一行填入非零元素的行号,列号,元素值。
* */
int [][] sparseArray=ArrayToSparseArray(oraginArray);
//打印稀疏数组
for(int i=0;i<sparseArray.length;i++) {
for(int j=0;j<sparseArray[i].length;j++) {
System.out.printf("%d\t",sparseArray[i][j]);
}
System.out.println();
}
}
public static int[][] ArrayToSparseArray(int[][] oraginArray){
//原始数组的行数
int rowCount=oraginArray.length;
//原始数组的列数
int colCount=oraginArray[0].length;
//原始数组中非零值的个数。
int valCount=0;
Element e=null;
ElementArray ea=new ElementArray();
//遍历原始数组
for(int i=0;i<rowCount;i++) {
for(int j=0;j<colCount;j++) {
int data=oraginArray[i][j];
if(data!=0) {
e=new Element(i,j,data);
ea.add(e);
valCount++;
}
}
}
//创建新的稀疏数组
int[][] sparseArray=new int[valCount+1][3];
sparseArray[0][0]=rowCount;
sparseArray[0][1]=colCount;
sparseArray[0][2]=valCount;
//将储存元素的数组中的值填到稀疏数组中。
for(int i=0;i<ea.getLength();i++) {
Element gete=ea.getElement(i);
sparseArray[i+1][0]=gete.row;
sparseArray[i+1][1]=gete.col;
sparseArray[i+1][2]=gete.val;
}
return sparseArray;
}
}
//非零对象
class Element{
int row;//非零元素的行。
int col;//非零元素的列.
int val;//非零元素的值.
public Element(int row,int col,int val){
this.row=row;
this.col=col;
this.val=val;
}
}
//用于储存非零对象的数组
class ElementArray{
Element[] e=new Element[10];
//获取元素个数
public int getLength() {
int len=0;
for(int i=0;i<e.length;i++) {
if(e[i]!=null) {
len++;
}
}
return len;
}
public void add(Element val) {
int len=getLength();
if(len<e.length) {
e[len]=val;
}else {
e=new Element[e.length+10];
e[len]=val;
}
}
public Element getElement(int index) {
return e[index];
}
}
运行结果: