美文网首页
Java数组的定义及使用

Java数组的定义及使用

作者: 南在南方i | 来源:发表于2020-02-10 19:19 被阅读0次

    数组的基本概念

    所有的开发中都可能使用到数组,但并没有特别复杂,更多的是为了防止笔试中出现的问题

    数组指的是一组相关变量的集合

    在Java中数组属于引用数据类型,牵扯到内存的关系。对于数组的定义有以下两种语法形式:

    • 声明并开辟数组:数据类型 数组名称[] = new 数据类型[长度];如:int data[] = new int[3];

    • 声明数组:数据类型 数组名称[] = null;如:int data[];
      开辟数组:数组名称 = new 数据类型[长度];如:data = new int[3];

    当数组开辟之后,可采用数组[索引]的形式进行数组的访问,但是需要注意的是,任何长度的数组其范围一定是从“0”开始的。如果操作中超过了数组所允许的索引范围,则程序会出现ArrayIndexOutOfBoundsException报错

    以上是数组的动态初始化,特点:数组开辟空间之后,数组中每个元素的内容都是其对应数据类型的默认值

    数组输出

    由于数组本身是一种顺序式的结构,且长度固定,所以在进行数组内容输出的时候,往往可以采用for循环的方式完成。因此就牵扯到数组长度的获取,在Java中可以使用数组.length的属性获取数组的长度

    public class MyClass {
        public static void main(String[] args){
            int data[] = new int[3];//声明并创建数组
            //对数组赋值
            data[0] = 10;
            data[1] = 20;
            data[2] = 30;
            //利用数据.length与for循环输出数组
            for (int i = 0;i < data.length;i++){
                System.out.print(data[i]+"、");
            }
        }
    }
    

    数组的引用分析

    引用数据类型的分析过程基本相同,所以数组的引用分析其本质也是一样的,与对象的流程是相同的

    声明并开辟数组赋值内存关系图

    下图的流程与普通对象的流程本质上是没有任何差别的,唯一的区别是普通对象保存的是属性,利用属性名称来操作,而数组保存的是一组内容,用索引来操作

    声明并开辟数组赋值内存关系图
    数组的引用内存关系图

    引用的本质是同一个堆内存可以被不同的栈内存所指向并修改

    image.png

    数组的静态初始化

    • 动态初始化:只能在开辟数组空间之后才可以进行赋值

    • 静态初始化:在数组开辟的同时就可以存在明确的内容,语法如下:

      简化型:数据类型 数组名称[] = {值,值,...};
      完全型(推荐使用):数据类型 数组名称[] = new 数据类型[] {值,值,...};

    • 匿名对象的用法:new 数据类型[]{值,值,...};

    二维数组

    二维数组实际上与数据表的形式是相同的,由行和列组成,想要确定一个数据需要得知他的行和列的编号

    列索引 0 列索引 1 列索引 2
    行索引 0 23 5611 845
    行索引 1 223 61 8
    • 静态初始化:int data[] = new int[]{{值,值,...},{值,值,...},...}
    • 动态初始化:int data[] = new int[行个数][列个数] data = {{值,值,...},{值,值,...},...}
    二维数组的置换:
    public class MyClass {
        public static void main(String[] args){
            int data[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};//创建二维数组
            for (int i = 0; i < data.length; i++){
                for (int j = 0; j < data[i].length; j++){
                    //将二维数组进行置换
                    int temp = data[i][j];
                    data[i][j] = data[j][i];
                    data[j][i] = temp;
                }
            }
            for (int i = 0; i < data.length; i++){
                for (int j = 0; j < data[i].length; j++){
                    System.out.print(data[i][j]);//输出
                }
                System.out.println();
            }
        }
    }
    

    一般用于训练逻辑思维

    数组相关操作方法

    数组拷贝

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

    范例:

    • 原始数组①: 1、\color{red}{2}\color{red}{3}\color{red}{4}、5、6、7、8、9;
    • 原始数组②:10、20、30、40、50、\color{red}{60}\color{red}{70}\color{red}{80}、90;
    • 希望将数组②的部分内容替换掉数组1的内容:\color{red}{60、70、80}
    class ArrCopy{
        public static void main(String[] args){
            int data1[] = new int[]{1,2,3,4,5,6,7,8,9};
            int data2[] = new int[]{10,20,30,40,50,60,70,80,90};
            System.arraycopy(data2,5,data1,1,3);
            printArr(data1);
        }
        public static void printArr(int data[]){
            for (int i = 0; i < data.length; i++){
                System.out.print(data[i]+"、");
            }
        }
    }
    

    运行结果:1、60、70、80、5、6、7、8、9

    数组排序

    Arrays.sort(原始数组);

    范例:

    • 原始数组:2、1、6、4、3、9、7、8、5
    class ArrSort{
        public static void main(String[] args){
            int data[] = new int[]{2,1,6,4,3,9,7,8,5};
            Arrays.sort(data);
            printArr(data);
        }
        public static void printArr(int data[]){
            for (int i = 0; i < data.length; i++){
                System.out.print(data[i]);
            }
        }
    }
    

    运行结果:1、2、3、4、5、6、7、8、9

    总结

    • 数组属于引用数据类型
    • 数组属于线性的存储结构,里面的内容可以根据索引线性操作
    • 数组里面容易出现面试题!

    相关文章

      网友评论

          本文标题:Java数组的定义及使用

          本文链接:https://www.haomeiwen.com/subject/jrfzxhtx.html