数组(笔记)、创建数组与初始化、for-each循环、稀疏数组

本文详细介绍了Java中数组的创建、初始化及基本特点,包括静态和动态初始化。此外,还探讨了数组越界错误及for-each循环的使用。重点讲解了稀疏数组的概念,以及如何在Java中将普通二维数组转换为稀疏数组,再从稀疏数组还原回二维数组的过程。示例代码展示了具体实现。
摘要由CSDN通过智能技术生成

数组

1创建数组与初始化

        int[] a;    //推荐,Java声明数组的方法
        a = new int[10];    //创建数组,分配10个空间
        int b[];    // C、C++声明数组的方法
        int[] c = {1,2,3,4,5};//静态初始化
        int[] d = new int[5];//动态初始化,默认数据都是0

2数组的基本特点

1.数组被创建后,大小不可变。

2.一个数组的元素类型相同。

3.数组的元素类型包括基本类型和引用类型。

4.数组本身是对象,数组变量属于引用类型,Java中对象保存在堆中(使用new关键字new出来的)。

3拓展

(1)常见报错:

​ ArrayIndexOutOfBoundsException:数组下边越界

(2)for-each循环
//a.for    for-each循环,i:元素,a:数组名
//取不到下标,适合打印输出,不适合操作
for (int i : a) {
    System.out.print(a[i]+" ");
}
(3)稀疏数组

​ 稀疏数组可以用来以压缩的方式保存空间大数据少的二维数组。

/**
 * 用稀疏数组保存只有4个数据的10*10二维数组
 *      0 0 0 0 0 0 0 0 4 0
 *      0 0 5 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 0 0 5 0
 *      0 0 0 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 3 0 0 0
 *      0 0 0 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 0 0 0 0
 *      0 0 0 0 0 0 0 0 0 0
 */
public class SparseArray {
    public static void main(String[] args) {
        //1.创建一个10*10的二维数组
        int[][] ints = new int[10][10];
        ints[0][8] = 4;
        ints[1][2] = 5;
        ints[2][8] = 5;
        ints[5][6] = 3;

        System.out.println("output original array:");
        printTwoArray(ints);
        System.out.println("==========================================");

        System.out.println("output sparse array:");
        printSparseArray(toSparseArray(ints));
        System.out.println("==========================================");

        System.out.println("output two_dimension array:");
        printTwoArray(totwoDimArray(toSparseArray(ints)));
    }
    //2.普通二维数组转化为稀疏数组
    public static int[][] toSparseArray(int[][] arr){     
        //统计有效值个数
        int count = 0;
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++) {
                if(arr[i][j]!=0){
                    count++;
                }
            }
        }
        //创建稀疏数组
        int[][] sp = new int[count+1][3];
        sp[0][0] = 10;
        sp[0][1] = 10;
        sp[0][2] = count;
        //遍历二维数组,将有效值放入稀疏数组中
        int n = 1;
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++) {
                if(arr[i][j]!=0){
                    sp[n][0] = i;
                    sp[n][1] = j;
                    sp[n][2] = arr[i][j];
                    n++;
                }
            }
        }
        return sp;
    }
	//3.稀疏数组转化为普通二维数组
    public static int[][] totwoDimArray(int[][] arr){
        int[][] a = new int[10][10];
        //遍历稀疏数组,将有效值放入二维数组中
        for (int i=1; i<arr.length; i++){
            a[arr[i][0]][arr[i][1]] = arr[i][2];
        }
        return a;
    }

    //打印二维数组元素
    public static void printTwoArray(int[][] arr){
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
    //打印稀疏数组
    public static void printSparseArray(int[][] arr){
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<3; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值