Java数组

什么是数组:

1. 数组是相同数据类型的有序集合。

2. 数组也是对象,数组元素相当于对象的成员变量。

3. 数组长度确定,不可变。

1. 数组的声明和创建

代码示例

package com.baidu.www;

public class test {
    public static void main(String[] args) {
        // 数组的声明
        int[] numbers;
        int numbers2[];

        // 数组的创建
        numbers = new int[10];

        // 数组的长度
        System.out.println(numbers.length);

        // 数组元素的赋值
        numbers[0] = 1;
        numbers[1] = 2;
        numbers[2] = 3;
        numbers[3] = 4;
        numbers[4] = 5;
        numbers[5] = 6;
        numbers[6] = 7;
        numbers[7] = 8;
        numbers[8] = 9;

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

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

        System.out.println("数组的和值为:"+sum);
    }
}

d2ddbc0ffc662a35aef4d9236c3beb94

2. 三种初始化和内存分析

三种初始化:静态初始化、动态初始化、默认初始化。

代码示例

package com.baidu.www;

public class test {
    public static void main(String[] args) {
        // 静态初始化
        int[] a = {1, 2, 3};
        System.out.println(a[0]);

        // 动态初始化:包含默认初始化
        int[] b = new int[3];
        b[1] = 20;
        System.out.println(b[1]);
    }
}

数组是在堆中的

40d65278c3b2edbf5cf7eeef895064e6

3. 数组的使用

(1)普通的for循环

(2)For-Each循环

(3)数组作方法入参

(4)数组作返回值

代码示例

package com.baidu.www;

public class test {
    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]);
//        }

//        // 增强型for循环
//        for(int arr : arrays)
//        {
//            System.out.println(arr);
//        }

        System.out.println("=====================");

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

        // 寻找最大元素
        int max = arrays[0];

        for (int i = 1; i < arrays.length; i++) {
            if(arrays[i] > max) max = arrays[i];
        }
        System.out.println("最大值:"+max);

//        printArr(arrays);

        printArr(reverse(arrays));
    }

    // 打印数组元素
    public static void printArr(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(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;
    }
}

4. 二维数组

代码示例

package com.baidu.www;

public class test {
    public static void main(String[] args) {
        // 二维数组
        int[][] array = {{1,2}, {2,3},{3,4}};

//        System.out.println(array[2][0]);

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

5. Arrays类讲解

数组的工具类 java.util.Arrays

7a9f6a42c0a789c45e6488c1d4c78105

代码示例

package com.baidu.www;

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 9999, 23, 45, 788};

        System.out.println(arr);

        // 打印数组元素
        System.out.println(Arrays.toString(arr));

        // 数组排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        // 数组填充
        Arrays.fill(arr, 0);
        System.out.println(Arrays.toString(arr));

        Arrays.fill(arr, 2, 4, 99);
        System.out.println(Arrays.toString(arr));
    }
}

6. 冒泡排序

代码示例

package com.baidu.www;

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        int[] a = {1,7,4,6,9,2,0};
        System.out.println(Arrays.toString(sort(a)));;
    }

    // 冒泡排序
    public static int[] sort(int[] array){
        // 临时变量
        int temp = 0;

        // 外层循环
        for (int i = 0; i < array.length - 1; i++) {
            boolean flag = false; // 通过标识位减少没有意义的比较
            // 内层循环
            for (int i1 = 0; i1 < array.length - 1 - i; i1++) {
                if(array[i1+1] < array[i1]){
                    temp = array[i1];
                    array[i1] = array[i1 + 1];
                    array[i1 + 1] = temp;
                    flag = true;
                }
            }
            if(flag==false) break;
        }
        return array;
    }
}

7. 稀疏数组

e6a483023da77c5a524a701df517727e

代码示例

package com.baidu.www;

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        // 1. 创建一个二维数组,11*11
        //   0表示没有棋子
        //   1表示黑棋
        //   2表示白棋
        int[][] array = new int[11][11];

        array[1][2] = 1;
        array[2][3] = 2;

        for(int[] arr:array){
            for(int a:arr){
                System.out.print(a + "\t");
            }
            System.out.println();
        }

        // 转化为稀疏数组保存
        // 获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int i1 = 0; i1 < 11; i1++) {
                if(array[i][i1] != 0) sum++;
            }
        }
        System.out.println("有效值的个数为:" + sum);

        // 创建稀疏数组的数组
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;

        // 遍历二维数组,将非0值存放到稀疏数组
        int count = 0;
        for (int i = 0; i < array.length; i++) {
            for (int i1 = 0; i1 < array[i].length; i1++) {
                if(array[i][i1] != 0){
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = i1;
                    array2[count][2] = array[i][i1];
                }
            }
        }

        // 输出稀疏数组
        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]);
        }

        // 稀疏数组还原
        System.out.println("=================================");
        System.out.println("稀疏数组还原");
        // 读取稀疏数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        // 还原数组元素
        for (int i = 1; i < array2.length; i++) {
                array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }

        // 打印还原的数组
        System.out.println();
        for(int[] arr:array3){
            for(int a:arr){
                System.out.print(a + "\t");
            }
            System.out.println();
        }
    }
}
posted @ 2025-08-09 21:05  无敌美少女战士  阅读(5)  评论(0)    收藏  举报