Java05数组

Java05数组

image

数组概述

image

数组的声明创建与初始化

image
image

package com.mingmao.javaarray;

public class ArrayDeclarationAndCreation {
    public static void main(String[] args) {
        //变量类型 变量名=变量值
        //先定义后创建,默认初始化
        int[] arr1;
        arr1=new int[10];

        //定义并创建,默认初始化
        int[] arr2=new int[10];

        //动态初始化
        arr2[0]=3;
        arr2[3]=8;
        arr2[9]=6;
        //...没赋值的为默认值

        //静态初始化
        int[] arr3={1,2,3,4,5};

    }
}

内存分析

image
image

image
image

数组使用

image

package com.mingmao.javaarray;

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

        //打印所有元素
        for (int i=0;i<arr.length;i++) {
            System.out.println(arr[i]+"\t");
        }
        System.out.println();

        //打印所有元素的和
        int sum=0;
        for (int i = 0; i <arr.length; i++) {
            sum+=arr[i];
        }
        System.out.println("sum="+sum);

        //打印数组中的最大元素
        int max=arr[0];
        for (int i = 0; i <arr.length; i++) {
            max=(max>arr[i])?max:arr[i];
        }
        System.out.println("max="+max);

        //for each循环,无法获取下标
        for (int i : arr) {
            System.out.print(i+"\t");
        }
        System.out.println();

        //调用方法
        printArray(arr);
        int[] arr2=invertArray(arr);
        printArray(arr2);

    }

    //数组可作为参数传递给方法
    //打印数组
    public static void printArray(int[] arr){
        for (int i = 0; i <arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    //反转数组 ,数组做返回值
    public static int[] invertArray(int[] arr){
        int temp=0;
        for (int i = 0; i <=arr.length/2; i++) {
            temp=arr[i];
            arr[i]=arr[arr.length-1-i];
            arr[arr.length-1-i]=temp;
        }
        return arr;
    }
}

多维数组

image
image

package com.mingmao.javaarray;

import java.util.jar.JarOutputStream;

public class MultidimensionalArray {
    public static void main(String[] args) {
        //定义创建与初始化
        //静态
        int[][] arr1={{1,2,3,4},{1,2,3}};

        System.out.println(arr1[1][2]);
        System.out.println(arr1[0].length);
        System.out.println(arr1[1].length);

        printArray2(arr1);
    }

    //打印二维数组
    public static void printArray2(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();
        }
    }
}

Arrays类

image
可参考JDK帮助文档

package com.mingmao.javaarray;

import java.util.Arrays;

public class ArraysClass {
    public static void main(String[] args) {
        int[] arr={33,5,6,7,89,900,43,78,2,31};

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

        //排序--升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        //给数组填充成某个常数
        Arrays.fill(arr,5);
        System.out.println(Arrays.toString(arr));

        //指定范围的填充
        Arrays.fill(arr,2,5,4);
        System.out.println(Arrays.toString(arr));

    }
}

冒泡排序

image

package com.mingmao.javaarray;

import java.util.Arrays;

public class BubbleSortingAlgorithm {
    public static void main(String[] args) {
        int[] arr={2,4,1,67,89,45,36,9,37,79};
        int[] arr3={2,4,1,67,89,45,36,9,37,79};

        System.out.println(Arrays.toString(arr));
        int[] arr1=bubbleSorting(arr);
        System.out.println(Arrays.toString(arr1));

        System.out.println(Arrays.toString(arr3));
        int[] arr2=bubbleSorting1(arr3);
        System.out.println(Arrays.toString(arr2));
    }

    //冒泡排序法
    public static int[] bubbleSorting(int[] arr){
        int temp=0;
        int time=0;

        for (int j = 0; j <arr.length; j++) {
            time++;
            for (int i = arr.length-1; i >j; i--) {
                if(arr[i]<arr[i-1]){
                    temp=arr[i];
                    arr[i]=arr[i-1];
                    arr[i-1]=temp;
                }
            }
        }
        System.out.println("执行次数:"+time);
        return arr;
    }

    //冒泡排序优化,如果已经排好序了,就没必要再循环
    public static int[] bubbleSorting1(int[] arr){
        int temp=0;
        int time=0;

        layer1:for (int j = 0; j <arr.length; j++) {
            time++;
            boolean flag=false;
            for (int i = arr.length-1; i >j; i--) {
                if(arr[i]<arr[i-1]){
                    temp=arr[i];
                    arr[i]=arr[i-1];
                    arr[i-1]=temp;
                    flag=true;
                }
            }
            if(flag==false){
                break layer1;
            }
        }
        System.out.println("执行次数:"+time);
        return arr;
    }
}

稀疏数组

image

image

package com.mingmao.javaarray;

import java.util.Arrays;

public class SparseArray {
    public static void main(String[] args) {
        int[][] arr=new int[11][11];

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

        int[][] arr1=compactSparseArray(arr);
        System.out.println(Arrays.deepToString(arr1));

        int[][] arr2=restoreCompressedArray(arr1);
        System.out.println(Arrays.deepToString(arr2));
    }

    //压缩稀疏数组
    public static int[][] compactSparseArray(int[][] arr){
        int num1=0;
        int numrow=getValidValues(arr);
        int[][] arr1=new int[numrow+1][3];
        arr1[0][0]=arr.length;
        arr1[0][1]=arr[0].length;
        arr1[0][2]=numrow;

        for (int i = 0; i <arr.length; i++) {
            for (int j = 0; j <arr[i].length; j++) {
                if(arr[i][j]!=0){
                    num1++;
                    arr1[num1][0]=i;
                    arr1[num1][1]=j;
                    arr1[num1][2]=arr[i][j];
                }
            }
        }

        return arr1;
    }

    //获取数组有效值的个数
    public static int getValidValues(int[][] arr){
        int num=0;

        for (int i = 0; i <arr.length; i++) {
            for (int j = 0; j <arr[i].length; j++) {
                if(arr[i][j]!=0){
                    num++;
                }
            }
        }
        return num;
    }

    //还原压缩数组
    public static int[][] restoreCompressedArray(int[][] arr){
        int[][] arr2=new int[arr[0][0]][arr[0][1]];

        for (int i = 1; i <=arr[0][2]; i++) {
            arr2[arr[i][0]][arr[i][1]]=arr[i][2];
        }
        return arr2;
    }
}

学习视频

学习视频

posted @ 2021-09-07 16:10  明懋  阅读(35)  评论(0)    收藏  举报