JAVA数组

一、数组概述

1. 定义

  • 数组是相同类型数据结构的有序组合
  • 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们

二、数组声明创建

1. 语法

  • 声明数组变量
dataType[] arrayRefVar;  //首选方法     int[] nums;

dataType arrayRefVar[];  //效果相同,但不是首选    int nums2[];
//这种声明方式是c/c++的数组格式,java兼容
  • 使用new操作符创建
dataType[] arrayRefVar = new dataType[arraySize];
//int[] nums = new int[10];   没有这个大小
  • 数组是通过索引访问的,数组索引从0开始

  • 获取数组长度 arrays.length

    例子

package com.shelton.array;

public class ArrayDemo01 {
    //变量的类型  变量的名字  =  变量的值;
    //数组类型

    public static void main(String[] args) {
        int[] nums; //1.声明一个数组

        nums = new int[10];//2.创建一个数组

        //3.给数组元素中赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
        //若未赋值,int类型默认值为0

        System.out.println(nums[9]);

        //计算所有元素的和
        int sum = 0;
        //获取数组长度:arrays.length

        for (int i = 0; i < nums.length; i++) {
            sum =sum + nums[i];
        }

        System.out.println("总和为"+sum);
    }
}

/*
        10
        总和为55
*/

2. 内存分析

  • 内存

      • 存放new的对象和数组
      • 可以被所有的线程共享,不会存放别的对象引用
      • 存放基本变量类型(会包含这个基本类型的具体数值)
      • 引用对象的变量(会存放这个引用在堆里的具体地址)
    • 方法区
      • 可以被所有线程共享
      • 包含了所有的class和static变量
    image-20200914152108844
  1. 声明一个数组 int[] array; 在栈中

  2. 创建一个数组 array = new int[10]; 在堆中,int类型初始值都为0

  3. 给数组元素中赋 array[0] = 0; 在堆中

    array[1] = 1;

    ​ ...... array[9] = 2;

    因此new出来的数组都是在堆中的

3.数组的三种初始化状态

3.1 静态初始化

int[] a = {1,2,3};
Man[] mans = {new Man(1,1),New Man(2,2)};

3.2 动态初始化

int[] a = new int[2];
a[0] = 1;
a[1] = 2;

3.3 默认初始化

  • 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中每个元素也被按照实例变量同样的方式被隐式初始化
public class ArrayDemo02 {
    public static void main(String[] args) {
        //静态初始化   创建+赋值
        int[] a = {1,2,3,4,5,6,7,8};
        System.out.println(a[0]);
        //动态初始化
        int[] b = new int[10];
        b[0] = 10;

        System.out.println(b[0]);
        System.out.println(b[1]);//默认初始化

    }
}

4. 数组的四个基本特点

  • 长度是确定的,数组一旦被创建,它的大小就是不可以改变的
  • 其元素必须是相同类型,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属引用类型,数组也可以看成是对象,因此数组无论保存类型还是其他对象类型,数组对象本身是在堆中的

5. 数组边界

  • 下标的合法区间:[0,length-1],如果越界就会报错

    int[] a = new int[2];//int[] a中只包含a[0]、a[1]
    System.out.println(a[2]);//报错
    
        public static void main(String[] args) {
            //静态初始化   创建+赋值
            int[] a = {1,2,3,4,5,6,7,8};
            
            for (int i = 0; i <= a.length ; i++) {//[0,length-1]
                System.out.println(a[i]);
            }
    
  • ArrayIndexOutOfBoundsException:数组下标越界异常!

6. 小结

  • 数组是相同数据类型(数据类型可为任意类型)的有序集合
  • 数组也是对象,数组元素相当于对象的成员变量
  • 数组长度是确定的,不可变的,如果越界,则报:ArrayIndexOutOfBoundsException

三、数组使用※

普通for循环

package com.shelton.array;

public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};

        //打印全部的数组元素
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);
        }
        System.out.println("********************");

        //计算所有元素的和
        int sum = 0;
        for (int j = 0; j < arrays.length; j++) {
            sum += arrays[j];
        }
        System.out.println("和为"+sum);
        System.out.println("********************");

        //查找最大元素
        int max = arrays[0];
        for (int i = 0; i < arrays.length; i++) {
            if(max<arrays[i]) {
                max = arrays[i];
            }
        }
        System.out.println("最大数为"+max);
    }
}

1. For-Each 循环(增强for)

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};

        //JDK1.5引入  没有下标
        for (int element : arrays) {//遍历元素
            System.out.println(element);//打印元素
        }
    }
}
/*
        1
        2
        3
        4
        5
*/
  • 二维数组
package com.shelton.array;

public class ArrayDemo22 {
    public static void main(String[] args) {
        int[][] arrays = {{4,2,3,4,89},{32,83,2,6,5,9}};

        forPrint(arrays);
        System.out.println("===================");
        forEachPrint(arrays);
    }
    //toString只能输出一维数组

    //for遍历输出
    public static void forPrint(int[][] arrays){
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                System.out.print(arrays[i][j]+"\t");
                if (j == arrays[i].length - 1) {
                    System.out.println();
                }
            }
        }
    }
    //foreach遍历输出
    public static void forEachPrint(int[][] arrays){
        for (int[] ints : arrays) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
/*
4	2	3	4	89
32	83	2	6	5	9
===================
4	2	3	4	89
32	83	2	6	5	9
 */

2. 数组作方法入参

package com.shelton.array;

public class ArrayDemo05 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        printArray(arrays);
    }

    //打印数组元素
    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]+" ");
        }
    }
}
/*
        1 
        2 
        3 
        4 
        5 
*/

3. 数组作返回值

package com.shelton.array;

public class ArrayDemo06 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};

        for (int i = 0; i <arrays.length; i++) {
            System.out.println(reverse(arrays)[i]);
        }
    }

    //反转数组
    public static int[] reverse(int[] arrays){

        int[] result = new int[arrays.length];
        //反转的操作
        for (int i = 0; i < arrays.length; i++) {
            result[i] = arrays[arrays.length-1-i];
            //result[0]=arrays[arrays.length-1]
        }

        return result;
    }
}
/*
        5
        4
        3
        2
        1
*/

改进

package com.shelton.array;

public class ArrayDemo07 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};

        for (int i = 0; i <arrays.length; i++) {
            System.out.println(reverse(arrays)[i]);
        }
    }

    //反转数组
    public static int[] reverse(int[] arrays){

        int[] result = new int[arrays.length];
        //反转的操作
        for (int i = 0,j=result.length-1; i < arrays.length; i++,j--) {
            result[j] = arrays[i];
        }

        return result;
    }
}
/*
        5
        4
        3
        2
        1
*/

四、多维数组

1.多维数组可以看成是数组的数组

  • 例如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组

    image-20200914152108844

2. 二维数组

2.1 语法

int a[][] = new int[2][5]
public class ArrayDemo08 {
    int[][] array = {{1,2},{2,3},{3,4}}
}
image-20200914152108844

2.2 例子

package com.shelton.array;

public class ArrayDemo08 {
    public static void main(String[] args) {
        //[4][2]
    /*
        1,2     array[0]
        2,3     array[1]
        3,4     array[2]
        4,5     array[3]
     */
        int[][] array = {{1,2},{2,3},{3,4},{4,5}};

        System.out.println("遍历array后的array[0]=");
        printArray(array[0]);
        System.out.println("将array[][]直接输出array[0]="+array[0]);
        System.out.println("array[2][1]="+array[2][1]);
        System.out.println("array[0].length="+array[0].length);

    }

    //打印数组元素
    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]+" ");
        }
    }

}
/*
        遍历array后的array[0]=
        1 
        2 
        将array[][]直接输出array[0]=[I@1b6d3586
        array[2][1]=4
        array[0].length=2
*/

2.3 例子

package com.shelton.array;

public class ArrayDemo09 {
    public static void main(String[] args) {

        int[][] array = {{1,2},{2,3},{3,4},{4,5}};

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]);
                //数组换行
                if (j==array[i].length-1){
                    System.out.println();
                     /*
                            i=0  i<4  j=0  j<a[0].l=2  a[0][0]  i!=a[0].l-1=1
                                      j=1  j<a[0].l=2  a[0][1]  i!=a[0].l-1=1
                     */
                }
            }
        }
    }
}

3. 多维数组

package com.shelton.array;

public class ArrayDemo10 {
    //遍历打印一个4行3列1的数组
    public static void main(String[] args) {
        int a[][][] = {{{1,2},{2,3}},{{3,4},{4,5}}};

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                for (int k = 0; k < a[i][j].length; k++) {
                    System.out.print(a[i][j][k]);
                    if (k==a[i][k].length-1) {
                        System.out.print(" ");
                        if (j==a[i].length-1){//放在内部if,第二层数组打印完才换行,放在外部if会直接换行
                            System.out.println();
                            /* i=0  i<a.l=4  j=0  j<a[i=0].l=2  k=0  k<a[i=0][j=0].l=2       k++
                                                                k=1  k<a[i=0][j=0].l=2  换行  k++
                                             j=1  j<a[i=0].l=2  k=0  k<a[i=0][j=1].l=2       k++
                                                                k=1  k<a[i=0][j=1].l=2  换行  k++
                            */
                        }
                    }
                }
            }
        }
    }
}
/*
        12 23 
        34 45 
 */

五、Arrays类

1. 数组的工具类java.util.Arrays

1.1 查看类的使用

1.2打印数组元素 Arrays.toString(a)

package com.shelton.array;

import java.util.Arrays;

public class ArrayDemo11 {
    public static void main(String[] args) {

        int[] a = {1,2,3,4,9090,31231,543,21,3,23};

        System.out.println(a);//[I@1b6d3586

        //打印数组元素 Arrays.toString(a)
        System.out.println(Arrays.toString(a));
    }
}
//      [1, 2, 3, 4, 9090, 31231, 543, 21, 3, 23]

  • Arrays.toString(a)源码
public static String toString(int[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}
  • 工具可以自己用方法写,实现相同的功能
  • 掌握工具可以避免重复工作,造轮子
public class ArrayDemo11 {
    public static void main(String[] args) {

        int[] a = {1,2,3,4,9090,31231,543,21,3,23};
        
        printArray(a);      
    }
    
    //打印数组元素
    public static void printArray(int[] arrays) {

        for (int i = 0; i < arrays.length; i++) {
            if (i==0) {
                System.out.print("["+arrays[i]+", ");
            }else if (i==arrays.length-1) {
                System.out.print(arrays[i]+"]");
            }else {
                System.out.print(arrays[i]+", ");
            }
        }
    }
}
//      [1, 2, 3, 4, 9090, 31231, 543, 21, 3, 23]  

1.3 数组排序 Arrays.sort(a)

package com.shelton.array;

import java.util.Arrays;

public class ArrayDemo12 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,9090,31231,543,21,3,23};

        Arrays.sort(a); //数组进行排序:升序

        System.out.println(Arrays.toString(a));
    } 
}
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用。(不是不能)

1.4 数组赋值——fill方法

package com.shelton.array;

import java.util.Arrays;

public class ArrayDemo14 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,9090,31231,543,21,3,23};

        Arrays.fill(a,0);//数组填充
        System.out.println(Arrays.toString(a));
    }
}
/*
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
 */
        int[] a = {1,2,3,4,9090,31231,543,21,3,23};

        Arrays.fill(a,2,4,0);//fromindex--toindex 左闭右开
        System.out.println(Arrays.toString(a));
/*
        [1, 2, 0, 0, 9090, 31231, 543, 21, 3, 23]
             a[2] a[3]
*/
  • 查看官方帮助文档jdk1.8

1.5 常用功能

  • 给数组进行赋值——fill方法
  • 对数组排序——sort方法,升序
  • 比较数组——equals方法,比较素数中元素值是否相等
  • 查找数组元素——binarySearch方法,对排序号的数组进行二分法查找

1.6 冒泡排序

  • 基本思想:从左到右使用相邻两个元素进行比较,如果第一个比第二个大,则交换两个元素。这样会使较大数下沉到数组的尾端,即较小数像泡泡一样冒到数组首端。
  • 嵌套循环——时间复杂度为O(n2)
package com.shelton.array;

import java.util.Arrays;

public class ArrayDemo20 {
    public static void main(String[] args) {
        int[] a = {2,1,5,4,3,8};
        int[] b = sort(a);//排序后的数组
        System.out.println(Arrays.toString(b));
    }
    //冒泡升序
    public static int[] sort(int[] array){
        int temp = 0;
        //外层循环——所有数比较的轮数
        //6个数比较,array.length=6,6个数要进行5轮比较,因此前5个顺序确定,第6个自然确定
        for (int i = 0; i < array.length-1; i++) {
            //内层循环——两个数比较的次数
            //6个数比较,array.length=6,1个数要进行5次比较,因此前5个顺序确定,第6个自然确定
            for (int j = 0; j < array.length-1; j++) {
                //本身使用array.length也不会溢出,会将最后一个数也比较一次,但这里用了array[j+1]所以要length-1不溢出
                if(array[j]>array[j+1]){
                    temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
}
思考如何优化
  • 基本冒泡算法之所以进行了无用的多余扫描,是因为不知道已经排好了序;所以只要我们在第 i 轮(i小于n-1,因为n个数比较n-1轮)就知道序列已经排好序,我们就不用进行之后的扫描了。
  • 例如在7个数排序,若在第5轮其实已经排好序了,但基本的冒泡排序算法还会进行第6轮比较,这其实只是进行没必要的比较,而不会进行元素的交换。
  • 综上所述,我们可以增加一个boolean变量,来标识是否已经排好序。优化代码如下:
public class ArrayDemo20 {
    public static void main(String[] args) {
        int[] a = {2,1,5,4,3,8};
        int[] b = sort(a);//排序后的数组
        System.out.println(Arrays.toString(b));
    }
    //冒泡升序
    public static int[] sort(int[] array){
        int temp = 0;
        //用于标识是否已经将序列排好序
        boolean isOrdered = false;
        for (int i = 0; i < array.length-1; i++) {
            //每一轮开始前都假设已经有序
            isOrdered = true;
            for (int j = 0; j < array.length-1; j++) {
                if(array[j]>array[j+1]){
                    temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                    //如果出现有元素交换,则表明此次可能没有完成排序
                    isOrdered = false;
                }
            }
            //如果当前轮都没有进行元素的交换,证明前面一轮比较已经排好序
            //直接跳出循环
            if(isOrdered){
                break;
            }
        }
        return array;
    }
}

如何优化冒泡排序

六、稀疏数组

1. 引例

  • 编写五子棋游戏中,有存盘退出和续上盘的功能

    image-20200914152108844
  • 分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据

  • 解决——稀疏数组

2. 定义

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组

  • 稀疏数组的处理方式

    • 记录数组一共有几行几列,有多少个不同值

    • 具有不同值的元素行、列、值记录在一个小规模的数组中,从而缩小程序的规模

3. 使用方法

[0]原数组行数     原数组列数       原数组有效值个数
[1]有效值所在行   有效值所在列      有效值的值
…………
[11]有效值所在行   有效值所在列      有效值的值

4. 例子

image-20200914152108844
  • 原始数组
package com.shelton.array;

import java.util.Arrays;

public class ArrayDemo21 {
    public static void main(String[] args) {
        //1.创建一个二维数组 11*11    0-没有棋子  1-黑棋    2-白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        //输出原始数组
        System.out.println("输出原始数组");
        //for.each循环遍历数组的简单写法
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
/*
        输出原始数组
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	1	0	0	0	0	0	0	0	0	
        0	0	0	2	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
 */
  • 转换为稀疏数组
		//有效值个数
    	int sum = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值个数为"+sum);

        //2.创建一个稀疏数组的数组
		//第0——原数组的行、列、有效值个数
        //其余行——有效值所在的行、列、值
		//因此总行数为[有效值数+1],总列数为[3]——行、列、值
        int[][] array2 = new int[sum+1][3];
        //第0行
        array2[0][0] = array1.length;
        array2[0][1] = array1.length;
        array2[0][2] = sum;

        //遍历二维数组,将非0的值存放到稀疏数组中
		//设置count计数,作为行数,从1开始
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;
                    //从第1行横坐标
                    array2[count][0] = i;
                    //从第1行纵坐标
                    array2[count][1] = j;
                    //从第1行值
                    array2[count][2] = array1[i][j];
                }
            }
        }
        System.out.println("输出稀疏数组");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                                +array2[i][1]+"\t"
                                +array2[i][2]+"\t");
/*
        有效值个数为2
        输出稀疏数组
        11	11	2 //array2[0]原数组总行数	原数组总列数	有效值个数
        1	2	1 //array2[1]有效值所在行	有效值所在列	有效值的值
        2	3	2	
*/            
  • 稀疏数组还原成原数组
//稀疏数组还原
System.out.println("还原");
//1.读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
//2.给元素还原值
for (int i = 1; i < array2.length; i++) {
    array3[array2[i][0]][array2[i][1]]=array2[i][2];
}
//3.打印还原数组
for (int[] ints : array3) {
    for (int anInt : ints) {
        System.out.print(anInt+"\t");
    }
    System.out.println();
}
/*
还原
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
*/

4.1 完整Demo

package com.shelton.array;

public class ArrayDemo23 {
    public static void main(String[] args) {
        System.out.println("======================================原始数组====================================");
        //1.创建一个二维数组 11*11    0-没有棋子  1- 黑棋    2-白棋
        int[][] array  = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        //2.输出原始数组
        printArray(array);

        System.out.println("====================================转换为稀疏数组=================================");
        //1.获取有效值个数
        int num = getNum(array);
        System.out.println("(有效值个数为"+num+")");
        //2.创建一个稀疏数组
        int[][] array2 = buildSparseArray(array);
        //3.打印稀疏数组
        System.out.println("==法1. foreach输出稀疏数组==");
        printArray(array2);
        System.out.println("==法2. for输出稀疏数组======");
        printSparseArray(array2);

        System.out.println("==================================稀疏数组转换为原数组==============================");
        //1.创建原始数组
        int[][] array3 = buildArray(array2);
        //2.输出原始数组
        printArray(array3);
    }

    //打印数组
    public static void printArray(int[][] array){
        for (int[] ints : array) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }

    //获取有效值个数	array[1][2]=1   array[2][3]=2
    public static int getNum(int[][] array){
        int num = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                //不为0的才是有效数字
                if (array[i][j]!=0){
                    num++;
                }
            }
        }
        return num;
    }

    //创建一个稀疏数组
    public static int[][] buildSparseArray(int[][] array){
        int num = getNum(array);
        //总行数为[有效值数+1],总列数为[3]——行、列、值
        int[][] array2 = new int[num+1][3];
        //第0行
        array2[0][0] = array.length;
        array2[0][1] = array[0].length;
        array2[0][2] = num;
        //其余行
        int rank = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(array[i][j]!=0){
                    rank++;
                    array2[rank][0] = i;
                    array2[rank][1] = j;
                    array2[rank][2] = array[i][j];
                }
            }

        }
        return array2;
    }

    //创建原始数组
    public static int[][] buildArray(int[][] array2){
        //读取稀疏数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        //从第1行遍历稀疏数组——原始数组中有效值的行、列、值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        return array3;
    }
    
    //输出稀疏数组法2
    public static void printSparseArray(int[][] array2){

        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                    +array2[i][1]+"\t"
                    +array2[i][2]+"\t");
        }
    }

}
/*
        ======================================原始数组====================================
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	1	0	0	0	0	0	0	0	0	
        0	0	0	2	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        ====================================转换为稀疏数组=================================
        (有效值个数为2)
        ==法1. foreach输出稀疏数组==
        11	11	2	
        1	2	1	
        2	3	2	
        ==法2. for输出稀疏数组======
        11	11	2	
        1	2	1	
        2	3	2	
        ==================================稀疏数组转换为原数组==============================
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	1	0	0	0	0	0	0	0	0	
        0	0	0	2	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
        0	0	0	0	0	0	0	0	0	0	0	
 */
posted @ 2020-09-15 20:42  球球z  阅读(123)  评论(0)    收藏  举报