Java SE知识点二:数组

前言:

Java中的数组在写法上于C语言有些许不同,但基本的遍历和引用还是相似的。

数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。

1. 数组的创建和初始化

1.1 数组的创建

在Java中,数组的创建是通过  类型[ ] + 数组名 = new 类型[ ] 来创建的

public static void main(String[] args){
        //数组
        int[] arr1 = {1,2,3,4,5};  //与C的不同之处
        int[] arr2 = new int[10];   //相当于初始化,10个0
        int[] arr3 = new int[] {1,2,3,4,5,6};

        //其他写法
        int[] arr4;
        arr4 = new int[10];
        int[] arr5;
        arr5 = new int[]{1,2,3,4,5,6};

        //其他类型
        double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
        String[] array3 = new String[]{"hell", "Java", "!!!"};
}

上述代码就是数组的创建

1.2 数组的初始化

数组的初始化可以分为 静态初始化 和 动态初始化。

静态初始化:

int[] array = new int[10]; //创建数组时,指定数组的元素个数

动态初始化:

int[] array2 = {1,2,3,4,5}; //在创建数组时不直接指定数据元素个数,而直接将指定具体的数据内容

2. 数组的访问与引用

2.1 数组的访问

因为数组在内存中是一段连续的空间,与C语言相同,空间编号都是从0开始的,然后递增,这称为数组下标。因此,可以通过数组下标对数组元素进行访问。

public static void main(String[] args){
        //打印
        int[]array = new int[]{10, 20, 30, 40, 50};
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);
        System.out.println(array[3]);
        System.out.println(array[4]);

        // 也可以通过[]对数组中的元素进行修改
        array[0] = 100;
        System.out.println(array[0]);

        //.length获取数组长度
        System.out.println(array.length);

        //遍历数组1
        for(int i = 0; i < array.length; i++){
            System.out.println(array[i]);
        }
        //遍历数组2  for each循环  区别是拿不到下标
        for (int x : array) {
            System.out.println(x);
        }
    }

上述代码给出了访问数组元素的方式,可以直接访问:array[下标],也可以通过循环遍历访问。另外,for each 循环 与 for循环 的区别是,for循环是根据下标进行访问的,因此可以知道元素下标;而 for each 循环是通过数组元素赋值进行访问的,所以拿不到元素下标。

2.2 数组的引用

当我们直接打印数组的时候,并不是进行数组的访问。

public static void main1(String[] args){
        //数组
        int[] arr1 = {1,2,3,4,5};  //与C的不同之处
        
        System.out.println(arr1); //打印出来的不是元素,而是“地址” -- 堆;可以用于引用
}

可以看到,直接打印数组名,输出的是一串类似于地址的编码,对这个地址就可以进行数组的引用

比如:作为参数传入方法中,作为返回类型等等。

所以说数组是一种引用类型,引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。这有点类似于C语言中的指针,也是储存地址的变量,只不过Java中的引用比指针更方便。

3. 数组的练习

3.1 数组拷贝

import java.util.Arrays; //必须引用Arrays

public static void main7(String[] args){
        int[] array = {1,2,3,4,5};

        //Arrays.copyOf()
        int[] copy = Arrays.copyOf(array,array.length); //如果length*2,相当于扩容
        //Arrays.toString() 将数组转换为字符串输出
        System.out.println(Arrays.toString(copy));

        int[] copy2 = Arrays.copyOfRange(array,2,5); //copy 任意范围 [2,5)
        System.out.println(Arrays.toString(copy2));

        //System.arraycopy
        int[] copy3 = new int[array.length];
        //              目标   目标起始   目的地 目的地起始  长度
        System.arraycopy(array,0,copy3,0,array.length);
        System.out.println(Arrays.toString(copy3));

    }

在C语言中关于数组的拷贝是用到 comcpy() 函数,而在Java中则用到 Array.valueOf()进行拷贝。

3.2 二分查找

不同于C语言中二分查找需要写一个函数来实现,Java中已经有现成的可以用。

public static void main(String[] args) {
        int[] array = {2,3,4,5,6,7,8};
                    //Arrays 中自带的函数 (数组,需要查找的元素)
        int index = Arrays.binarySearch(array,5);

        System.out.println(index);

    }

元素 5 的下标是 3

3.3 数组排序

C语言中我们经常写一个冒牌排序的函数对数组元素进行排序,在Java中也有内置的排序

public static void main(String[] args) {
    int[] arr = {9, 5, 2, 7};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}

通过Array.sort(),也可以快速对数组元素进行排序。

类似这样的还有很多,Java中都有比较方便的实现方法。

4. 二维数组

与C语言相同,二维数组也是许多一维数组的集合。

//二维数组
    public static void main(String[] args){
        //方式1
        int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        //方式2
        int[][] arr2 = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        //方式3
        int[][] arr3 = new int[3][4]; //初始化为0


        //循环遍历
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

        //每行的长度也可以找
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]); //存的是地址,所以行都是一个数组
        System.out.println("-------------------");
        System.out.println(Arrays.toString(arr[0]));
        System.out.println(Arrays.toString(arr[1]));
        System.out.println(Arrays.toString(arr[2]));
        System.out.println("-------------------");
        System.out.println(arr[0].length);
        System.out.println(arr[1].length);
        System.out.println(arr[2].length); //这样找每行的长度
        System.out.println(arr.length); //行数


        //快速打印二维数组
        System.out.println(Arrays.deepToString(arr));

        //不规则的二维数组
        int[][] array = new int[2][];
        array[0] = new int[]{1,2,3};
        array[1] = new int[]{4,5,6,7,8};
        System.out.println(Arrays.deepToString(array));
    }

上述代码就是一些关于二维数组的内容,包括初始化,打印,长度,深度打印等等。

值的一题的是,关于二维数组的长度,我们使用 .length 的方法来获取,直接用数组名+.length 获得的是二维数组的行数,用 数组名[ i ] + .length 获取的是列数,也就是每行的长度。因此在 for 循环的时候,可以直接用上述方法获取长度。

小结:

数组这一部分的内容也是和C语言大同小异,也有自己的写法以及方便的用法,这也是Java容易上手的原因之一。接下来就是Java的主要内容,类和对象。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值