Day05数组

所有学习内容来自:狂神说java

一、数组

二、数组的声明创建


public class Demo01 {
    //变量的类型 变量的名字 = 变量的值
    public static void main(String[] args) {
        int[] nums;//定义 1.声明一个数组
        int nums2[];//定义

        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;

        System.out.println(nums[0]);//1
        System.out.println(nums[9]);//0	int数组默认值为0
    }
}


数组的基本特点:

三、数组初始化及内存分析

内存分析

数组初始化

public class Demo02 {
    public static void main(String[] args) {
        //静态初始化: 创建+赋值
        int[] a = {1, 2, 3, 4, 5};
        
        //动态初始化:包含默认初始化
        int[] b = new int[5];
        b[0] = 1;
    }
}

四、数组使用

For-Each循环

举例:

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

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

        System.out.println("========================");
        //计算所有元素的和
        int sum = 0;
        for(int i : nums){
            sum += i;
        }
        System.out.println("数组元素的和为:"+sum);

        System.out.println("===========================");
        //查找最大元素
        int biggest = nums[0];
        for (int i=1; i<nums.length; i++){
            if(nums[i]>biggest){
                biggest = nums[i];
            }
        }
        System.out.println("数组中最大的元素为:"+biggest);

    }
}

数组作方法入参

数组作返回值

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

        Demo04 demo04 = new Demo04();
        demo04.printArrays(nums);
        System.out.println("\n===================");
        int[] rev_nums = demo04.reverse(nums);
        for(int i: rev_nums){
            System.out.print(i);
        }

    }
	
    //打印数组
    public void printArrays(int[] nums){
        for (int i:nums){
            System.out.print(i);
        }
    }
	
    //反转数组
    public int[] reverse(int[] nums){
        int[] rev_nums = new int[nums.length];
        for(int i=0; i<nums.length; i++){
            rev_nums[i] = nums[nums.length - 1 - i];
        }
        return rev_nums;
    }
}

五、多维数组

举例:

public class MultiDimArrayDemo01 {
    public static void main(String[] args) {
        int[][] mdArrays = new int[3][4];
        int[][] mdArrays2 = {{1, 2},{5, 6},{9, 10}};

        mdArrays[0][1] = 1;
        System.out.println(mdArrays[0][1]);
        System.out.println(mdArrays2[2][1]);

        System.out.println(mdArrays2.length);

        System.out.println("======================");
        printArr(mdArrays2);
    }

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

六、Arrays类

java.util.Arrays

import java.util.Arrays;

public class arrClassDemo01 {
    public static void main(String[] args) {
        int[] a = {12, 484 ,32 ,1, 415, 21};

        // 打印数组
        System.out.println(Arrays.toString(a));
        printArray(a);

        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        
        // 数组填充
        Arrays.fill(a, 2, 4, 0);
        System.out.println(Arrays.toString(a));
        Arrays.fill(a, 0);
        System.out.println(Arrays.toString(a));
    }

    public static void printArray(int[] a){
        System.out.print("[");
        for (int i = 0; i < a.length-1; i++) {
            System.out.print(a[i]+", ");
        }
        System.out.println(a[a.length-1]+"]");
    }
}

冒泡排序:

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] a = {12, 484 ,32 ,1, 415, 21};
        int[] b = bubbleSort(a);

        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));

    }
    public static int[] bubbleSort(int[] nums1){

        int[] nums = new int[nums1.length];
        for (int i = 0; i < nums1.length; i++) {
            nums[i] = nums1[i];
        }
        // 如果直接使用传入的a数组会导致初始的a数组也被排序,将a数组元素赋给一个新数组之后就不会影响a数组
        // 这段可有可无
        
        int toChange = 0;
        //循环次数
        for (int i = nums.length-1; i > 1; i--) {
            // 优化,通过flag标志减少无意义的比较
            boolean flag = true;

            // 内层循环,进行大小比较
            for (int j = 0; j < i; j++) {
                if (nums[j] > nums[j+1]){
                    toChange = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = toChange;
                    flag = false;
                }
            }
            if (flag){
                break;
            }
        }
        return nums;
    }
}

七、稀疏数组


创建稀疏数组:

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

        System.out.println("打印原始数组:");
        printArray(checkboard);

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

        // 2.创建一个稀疏数组的数组
        int[][] sparseArr = new int[sum+1][3];
        sparseArr[0][0] = checkboard.length;
        sparseArr[0][1] = checkboard[0].length;
        sparseArr[0][2] = sum;

        //后续稀疏数组的值
        int num = 1;
        for (int i = 0; i < checkboard.length; i++) {
            for (int j = 0; j < checkboard[0].length; j++) {
                if (checkboard[i][j] != 0){
                    sparseArr[num][0] = i;
                    sparseArr[num][1] = j;
                    sparseArr[num][2] = checkboard[i][j];
                    num ++;
                }
            }
        }
        // 打印稀疏数组
        System.out.println("打印稀疏数组:");
        printArray(sparseArr);
    }

    public static void printArray(int[][] arrays){
        for (int[] nums : arrays){
            for (int i : nums){
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }
}

// outs:
//打印原始数组:
//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
//打印稀疏数组:
//11 11	2
//1	2 1
//2 3 2	

//还原稀疏数组的值
        // 1.读取初始数组维度
        int[][] new_checkBoard = new int[sparseArr[0][0]][sparseArr[0][1]];

        // 2.还原元素值
        for (int i = 1; i < sparseArr.length; i++) {
            new_checkBoard[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        // 3.打印还原后的数组
        System.out.println("还原后的数组:");
        printArray(new_checkBoard);

posted @   d1rtywater  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示