1.数组初始化

1.1动态初始化(声明并开辟数组)

数据类型【】 数组名称 = new 数据类型 【长度】

        eg:声明并开辟一个长度为5的数组            int[ ] data = new int[5];

        a.数组通过下标索引来取得元素,下标默认从0开始。数组下标超出数组长度,数组越界异常(运行时异常)

        b.数组中每个元素都有默认值,默认值是该数据类型默认值

        c.数组名称.length:取得数组长度

        d.数组遍历推荐使用for-each循环(仅限于数组内容读取),要修改数组内容,还是使用常规for循环 for(int num:data){...}

        数组属于引用数据类型,必须在使用前先初始化,否则会NullPointerException(空指针异常),也属于运行时异常。

        引用传递:多个栈内存指向同一块堆内存

        eg:

public class test{
    public static void main(String[] args){
        int[] arr = new int[3];
        System.out.println(arr.length);
        arr[0] = 1;
        arr[1] = 2;
        for(int i=0; i<arr.length; i++)
        {
            System.out.print(arr[i]+" ");
        }
        /*
        for(int num:arr)
        {
            System.out.print(num+" ");
        }
        */
    }
}

1.2数组静态初始化

简化格式: 数据类型【】 数组名称 = {值,值...}

int[] arr = {10,20,30,40};
       
System.out.println(arr.length);

完整格式(推荐): 数据类型【】 数组名称 = new 数据类型{值,值...}

int[] arr = new int[] {10,20,30,40};
        
System.out.println(arr.length);

1.3二维数组

动态初始化: 数据类型【】【】 数组名称 = new 数据类型【行个数】【列个数】

        eg:开辟行数为3列数为4的整型数组           int 【】【】 arr = new int 【3】【4】;

public static void main(String[] args){
        int[][] arr = new int[3][4];
        arr[0][0] = 3;
        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();
        }
    }

静态初始化: 数据类型【】【】 数组名称 = new 数据类型【】【】{{第一行的值},{第二行的值} ... }

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

2.数组与方法的互操作-引用传递

2.1.方法接收数组

public class test{
    public static void main(String[] args){
        int[] data = new int[]{2,4,6,8,9};
        printArray(data);
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
}

2.2.方法返回数组

public class test{
    public static void main(String[] args){
        int[] data = init();
        printArray(data);
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
    public static int[] init(){
        return new int[]{2,4,6,8,9};
    }
}

2.3.方法修改数组

public class test{
    public static void main(String[] args){
        int[] data = init();    //对数组进行初始化
        modify(data);           //将数组中的每个数扩大二倍
        printArray(data);       //打印数组中的每个数
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
    public static int[] init(){
        return new int[]{2,4,6,8,9};
    }
    public static void modify(int[] data){
        for(int i=0; i<data.length; i++){
            data[i] *= 2;
        }
    }
}

3.Java对数组的支持(可以直接调用)

1.1.排序-java.util.Arrays.sort(数组名称)

            支持所有基本数据类型

            内部使用双轴快速排序

public class test{
    public static void main(String[] args){
        int[] data = new int[]{55,2,1,3,77,45,99,7,70};
        char[] c = new char[]{'a','b','d','c'};
        java.util.Arrays.sort(data);
        java.util.Arrays.sort(c);
        printArray(data);
        printArray(c);
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
    public static void printArray(char[] data){
        for(char temp : data){
            System.out.print(temp+" ");
        }
    }
}

2.数组的部分拷贝

System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);

public class test{
    public static void main(String[] args){
        int[] data1 = new int[]{1,2,3,4,5,6,7,8,9};
        int[] data2 = new int[]{11,22,33,44,55,66,77,88,99};
        System.arraycopy(data2,4,data1,1,3);
        printArray(data1);
        //1,55,66,77,5,6,7,8,9  和哪个数组长的更像,那么这个数组为目标数组,另一个为源数组
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
}

    3.数组全拷贝(重点)

java.util.Arrays.copyOf(源数组名称,新数组长度)

            返回一个新的整型数组

public class test{
    public static void main(String[] args){
        int[] data1 = new int[]{1,2,3,4,5,6,7,8,9};
        int[] temp = java.util.Arrays.copyOf(data1,data1.length+1);
        //只能从最开始拷贝
        printArray(temp);
    }

    public static void printArray(int[] data){
        for(int temp : data){
            System.out.print(temp+" ");
        }
    }
}