数组是一种数据结构,用来存储同一类型值的集合。通过一个整型索引(index,或称为下标)可以访问数组中的每一个值。

import java.util.Arrays;
public class TestClass {
    public static void main(String[] args) {
        
        /*-------------------------------------------------------------------
        【声明并初始化数组,设置数组长度】数据类型[] 数组名称 = new 数据类型[数组长度];
         1、数组长度不一定是常量,也可以是变量
         2、数组创建以后就不能改变长度了,想要改变长度,可以用另一种数据结构数组列表
         3、new关键字用于初始化
        */
        int[] num = new int[5];
        String[] str = new String[5];
        
        
        /*-------------------------------------------------------------------
        【声明并初始化数组,设置初始值】数据类型[] 数组名称 = {数组值1,数组值2,...}
         1、可以看到这句没有用到new,这是因为java编译器提供了一个语法糖,实际上编译时还会翻译成new xxx
        */
        int[] b = {1,2,3,4,5,6,7};
        System.out.println("b数组首次初始化,设置数组内容:"+Arrays.toString(b));
        /*<输出>
         b数组首次初始化,设置数组内容:[1, 2, 3, 4, 5, 6, 7]
         -------------------------------------------------------------------*/
        
        
        /*-------------------------------------------------------------------
        【声明并初始化数组,设置初始值,最后一个值后面有逗号】
         1、最后一个值后面有逗号,方便后续为数组增加值
        */    
        String[] authors =
            {
                    "Zhang San",
                    "Li Si",
            };
        
 
        /*-------------------------------------------------------------------
        【匿名数组】new 数据类型[] {数组内容}
         1、这里用到的Array.toString是用于打印数组内容的,如果不用这个包裹,打印的是数组的数据结构、数据类型、内存中的哈希地址
         2、匿名数组常用于减少代码量,比如方法入参,我就想使用指定的一些值来进行操作,那么就不需要特意声明一个数组再去处理
        */
        System.out.println("匿名数组:"+Arrays.toString(new int[] {17,19,23}));
        /*<输出>
         匿名数组:[17, 19, 23]
         -------------------------------------------------------------------*/
        

        /*-------------------------------------------------------------------
        【重新初始化数组】数组名称 = new 数据类型[] {数组内容}
         1、重新初始化数组时,数据类型要和数组一致,数组内容可以变更
        */
        b = new int[] {4,5,6,7,8};
        System.out.println("b数组重新初始化,设置数组内容:"+Arrays.toString(b));
        /*
         <输出>b数组重新初始化,设置数组内容:[4, 5, 6, 7, 8]
         -------------------------------------------------------------------*/
        
        
        /*-------------------------------------------------------------------
        【访问数组】数组名称[索引]
         1、数组元素从0开始编号,即第一位的索引为0
         2、数字数组初始化时,所有元素都初始化为0
         3、对象数组初始化时,所有元素都初始化为null
         4、数组.length可以获取数组的初始化长度,可以通过这个方法和for循环来实现数组元素的遍历
        */        
        System.out.println("num数组为int类型数组,没有初始值,所有元素初始化为0:"+Arrays.toString(num));
        System.out.println("str数组为String类型数组,没有初始值,所有元素初始化为null:"+Arrays.toString(str));
        System.out.println("我要打印authors数组的第二个数组元素,authors[1]:"+authors[1]);
        for (int i=0;i<b.length;i++)
        {
            if (i==0)
                System.out.println("<开始逐个打印b数组的数组元素>");
            System.out.println("b数组的第"+(i+1)+"个数组元素为:"+b[i]);
            if (i==b.length-1)
                System.out.println("<打印结束>");
        }
        /*<输出>
         num数组为int类型数组,没有初始值,所有元素初始化为0:[0, 0, 0, 0, 0]
         str数组为String类型数组,没有初始值,所有元素初始化为null:[null, null, null, null, null]
         我要打印authors数组的第二个数组元素,authors[1]:Li Si
         <开始逐个打印b数组的数组元素>
         b数组的第1个数组元素为:4
         b数组的第2个数组元素为:5
         b数组的第3个数组元素为:6
         b数组的第4个数组元素为:7
         b数组的第5个数组元素为:8
         <打印结束>
         -------------------------------------------------------------------*/
        
        
        /*-------------------------------------------------------------------
        【for each循环和数组】for (变量数据类型 变量名:数组名) statement
        */
        int flag = 1;
        for (String author:authors)
        {
            System.out.println("打印authors数组第"+flag+"个数组元素:"+author);
            flag++;
        }
        /*<输出>
         打印author数组第1个数组元素:Zhang San
         打印author数组第2个数组元素:Li Si
         -------------------------------------------------------------------*/
        
        
        /*-------------------------------------------------------------------
        【数组拷贝,拷贝引用地址】数据类型[] 数组名称 = 已存在的数组名称
         这种方式拷贝,如果其中一个数组发生变化,另一个数组会跟着变化
        【数组拷贝,通过Arrays类的copy0f方法拷贝数组值】数据类型[] 数组名称 = Arrays.copyOf(已存在的数组名称,新数组长度)
         这种方式拷贝,两个数组相互独立
        */
        int[] b_copy1 = b;
        int[] b_copy2 = Arrays.copyOf(b,b.length);
        int[] b_copy3 = Arrays.copyOf(b,b.length*2);
        System.out.println("b数组内容:"+Arrays.toString(b));
        System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1));
        System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2));
        System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3)+"\n");
        System.out.println("b数组元素修改,b指向的数组内容,影响b和b_copy1");
        b[1] = 999;
        System.out.println("b数组内容:"+Arrays.toString(b));
        System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1));
        System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2));
        System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3)+"\n");    
        System.out.println("b数组重新初始化,b指向的数组变了,只影响b本身");
        b = new int[] {8,9,10,11};
        System.out.println("b数组内容:"+Arrays.toString(b));
        System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1));
        System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2));
        System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3));    
        /*<输出>
         b数组内容:[4, 5, 6, 7, 8]
         b_copy1数组内容:[4, 5, 6, 7, 8]
         b_copy2数组内容:[4, 5, 6, 7, 8]
         b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0]
        
         b数组元素修改,b指向的数组内容,影响b和b_copy1
         b数组内容:[4, 999, 6, 7, 8]
         b_copy1数组内容:[4, 999, 6, 7, 8]
         b_copy2数组内容:[4, 5, 6, 7, 8]
         b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0]
        
         b数组重新初始化,b指向的数组变了,只影响b本身
         b数组内容:[8, 9, 10, 11]
         b_copy1数组内容:[4, 999, 6, 7, 8]
         b_copy2数组内容:[4, 5, 6, 7, 8]
         b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0]
         -------------------------------------------------------------------*/
        
        
        /*-------------------------------------------------------------------
        【数组排序】Arrays.sort(数组名称)
         用的是快速排序算法,QuickSort
        */
        b[2] = 5632;
        System.out.println("b数组排序前:"+Arrays.toString(b));
        Arrays.sort(b);
        System.out.println("b数组排序后:"+Arrays.toString(b));
        /*<输出>
         b数组排序前:[8, 9, 5632, 11]
         b数组排序后:[8, 9, 11, 5632]
         */
        
        /*-------------------------------------------------------------------
        【常见Arrays类方法罗列】
        【命令行接收数组参数】
        【多维数组】
         后面再学吧
        */
        
    }
}

 

posted on 2026-06-03 15:50  12345zjl  阅读(7)  评论(0)    收藏  举报