数组

数组

概述

​ 相同类型数据的有序集合

​ 若干个的,有先后顺序组成、并通过下标来访问集合中的数据

数组声明和创建

​ 1.声明数组变量

​ DataType[] arr; //使用习惯上更加推荐这个
DataType arr[];

​ 2.通过new来创建数组对象

​ DataType[] arr = new DataType[arraySize];

​ 注:

​ 数组的元素从 0 开始

​ 通过 array.length 可以获得 数组的长度

public static void main(String[] args) {
        //首先申明数组变量
        int[] arrInt;

        //通过new来创建数组
        arrInt = new int[10];

        //赋值
        arrInt[0] = 1;
        arrInt[1] = 2;
        arrInt[2] = 3;
        arrInt[3] = 4;
        arrInt[4] = 5;
        arrInt[5] = 6;
        arrInt[6] = 7;
        arrInt[7] = 8;
        arrInt[8] = 9;
        arrInt[9] = 10;

        System.out.println(arrInt.length);//10

        //计算所有元素的和
        int sum = 0;
        for (int i = 0; i < arrInt.length; i++) {
            sum += arrInt[i];
        }

        System.out.println(sum);//55
    }

三种初始化

​ 静态初始化

int[] arr = {1,2,3};

​ 动态初始化

int[] arr = new int[10];
arr[0]=1;
arr[1]=2;

​ 数组的默认初始化

​ 由于数组是一种引用类型、故分配空间时,其中的元素被隐式初始化了 (eg: int ->0,String->null)

基本特点:

​ 数组长度是固定的

​ 数组内的元素都为同一种类型

​ 数组的元素既可以是基本类型、也可以是引用类型

​ 数组也是对象的一种、因为数组在java中存放于堆中

数组使用

​ for-each循环 [JDK1.5 无下标的操作]

public static void main(String[] args) {
        int[] arrInt ={1,2,3,4,5,6,7,8,9};

        for (int i : arrInt) {
            System.out.println(i);
        }

    }

​ 数组 可以作为参数

    public static void main(String[] args) {
        int[] arrInt ={1,2,3,4,5,6,7,8,9};

        printArr(arrInt);

    }

    //打印数组元素
    public static void printArr(int[] arr) {
        for (int i : arr) {
            System.out.println(i);
        }
    }


​ 数组 可以作为返回值

    public static void main(String[] args) {
        int[] arrInt ={1,2,3,4,5,6,7,8,9};

        int[] arrFun = reverse(arrInt);
        printArr(arrFun);

    }

    //反转数组
    public static int[] reverse(int[] arr){
        int[] result = new int[arr.length];

        for (int i = 0,j = result.length-1 ; i < arr.length; i++,j--) {
            result[j] = arr[i];
        }

        return result;
    }

多维数组

​ 数组的数组。

​ 表现结果: [ [0,1] , [0,1] ]

​ 声明形式: DataType[ ] [ ] arr = { {dataType,dataType} , {dataType,dataType} … };

public static void main(String[] args) {

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

        /*              arr[][0] arr[][1]
            arr[0][]        1       2
            arr[1][]        2       3
            arr[2][]        3       4

            即第一个[]表明有多少行、第二个[]表明有多少列 
         */

    }

Arrays类

​ (可看相关文档)

​ 是有关于数组的工具类 java.util.Arrays

简单介绍

 public static void main(String[] args) {

        int[] a ={2,3,4,1,8,6,9,7};

        //打印数组元素
        System.out.println(Arrays.toString(a)); //[2, 3, 4, 1, 8, 6, 9, 7]

        //排序数组 ->升序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a)); //[1, 2, 3, 4, 6, 7, 8, 9]

    }

稀疏数组

​ 【压缩空间】

​ 当数组大部分为0、或同一值时,可用稀疏数组来保存该值

​ 处理方式:

​ 记录数字有几行几列、多少不同值

​ 将不同值的元素、行列、值记录在一个小规模的数组

eg:

						行 列 值
[  0,0,1,0,0   ]		  1  2	1
[  2,0,2,0,0   ]  ==>      2  0  2
[  0,0,0,0,0   ]		  2  2  2	

案例:黑白棋

public static void main(String[] args) {
        //1.创建二维数组 11*11 0->没有棋子 1->黑棋 2->白棋
        int[][] arr = new int[11][11];

        arr[1][2] = 1;
        arr[2][3] = 2;

        //输出元素数组
        for (int[] ints : arr) {
            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
         */

        //变成稀疏数组
            //1.获取有效值的个数
        int nums = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] != 0){
                    nums++;
                }
            }
        }
        System.out.println(nums); //2

            //2.创建稀疏数组
        int[][] arrOther = new int[nums+1][3];

        arrOther[0][0] = 11; //行
        arrOther[0][1] = 11; //列
        arrOther[0][2] = nums; //值的个数

            //遍历二维数组,将非零值存入稀疏数组
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] != 0){
                    count++;
                    arrOther[count][0] = i;
                    arrOther[count][1] = j;
                    arrOther[count][2] = arr[i][j];
                }
            }
        }

            //输出稀疏数组
        for (int i = 0; i < arrOther.length; i++) {
            System.out.println(arrOther[i][0] + "\t"
                    + arrOther[i][1] + "\t"
                    + arrOther[i][2] + "\t");
        }
        /*
            11	11	2
            1	2	1
            2	3	2
         */

        //3.还原稀疏数组
            //1.读取稀疏数组
        int[][] arrBack = new int[arrOther[0][0]][arrOther[0][0]];

            //2.给其中的元素还原它的值
        for (int i = 1; i < arrOther.length; i++) { //从 i=1 开始 是因为 第0行是信息而非数据
            arrBack[arrOther[i][0]][arrOther[i][1]] = arrOther[i][2];
        }

        for (int[] ints : arrBack) {
            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	
         */
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值