• 数组详解(java)


    目录

    数组的基本概念

    什么是数组?

    数组的创建

    数组的初始化

    动态初始化:

    静态初始化:

    数组中元素的默认值。

    数组的使用:

    数组中元素访问 

    遍历数组

     数组是引用类型

    基本类型变量与引用类型变量的区别

     引用变量

    认识 null

    数组的应用场景

    保存数据

    作为函数的参数

    参数传数组类型(引用数据类型)

    作为函数的返回值

    二维数组


    今天是七夕节,祝大家有对象的长长久久,没对象的早遇良人。

    实在没对象的可以自己new一个,过节嘛,最重要的是开心!

    七夕快乐!!!

    数组的基本概念

    什么是数组?

    数组:相同类型元素的集合。在内存中是一片连续的空间

    注意:

    1.数组中存放的元素类型相同。

    2.数组开辟的空间是连在一起的(java中二维数组不一定连续)。

    3.每个空间都有自己的编号,其初始位置的编号为0,即为数组的下标

    数组的创建

    类型[] 数组名= new 类型[数组长度];

    1. int[] array = new int[10];
    2. //创建一个数组,可以容纳10个int类型的元素。

    数组的初始化

    动态初始化:

    在创建数组时,直接指定元素个数。

    int[] array = new int[5];

    此时创建了一个可以容纳5个int类型元素的数组。

    静态初始化:

    在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
    double[] array = new int[]{1.0,2.0,3.0,4.0};

    静态初始化也可省去new int[] 简写成:

    double[] array = {1.0,2.0,3.0,4.0};

    注意:

    1.静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。

    2.静态初始化时, {}中数据类型必须与[]前数据类型一致。

    3.简写虽然省去了new T[], 但是编译器编译代码时还是会还原

    静态和动态初始化也可以分为俩步,但省略格式不可以。

    1. int[] array1;//这里并没有开辟空间,只是声明了一个变量名array1。
    2. array1 = new int[10];
    3. int[] array2;
    4. array2 = new int[]{10, 20, 30};
    5. //创建了一个可以容量3个int类型元素的数组,元素的初始值为10,20,30
    1. int[] array3;
    2. array3 = {1, 2, 3}
    3. //这是一种错误的写法。

    这里可以这么理解:对于{1,2,3}来说,它只是数组初始化的一种方式,并不表示为数组。而array3是一个数组,他应该指向一个已经初始化了的数组对象。

    数组中元素的默认值。

    如果没有对数组进行初始化,数组中元素有其默认值
    如果数组中存储元素类型为基本类型,默认值为基本类型对应的默认值,比如:

    数组的使用:

    数组中元素访问 

    数组在内存中是一段连续的空间,空间的编号都是从 0 开始的,依次递增,该编号称为数组的下标,数组可以通过 下标访问其任意位置的元素
    比如:
    1. int[]array = new int[]{10, 20, 30, 40, 50};
    2. System.out.println(array[0]);
    3. System.out.println(array[1]);
    4. System.out.println(array[2]);
    5. System.out.println(array[3]);
    6. System.out.println(array[4]);

    可以通过[]对数组中的元素进行修改
    1. int[]array = new int[]{10, 20, 30, 40, 50};
    2. array[1] = 90;
    3. System.out.println(array[1]);

    遍历数组

    在数组中可以通过 数组对象 .length 来获取数组的长度
    1. public static void main(String[] args) {
    2. int[] array = new int[]{1,2,3,4,5};
    3. System.out.println(array.length);
    4. }

     通过for循环来打印数组的每一个元素

    1. public static void main(String[] args) {
    2. int[] array = new int[]{1,2,3,4,5};
    3. for (int i = 0; i < array.length; i++) {
    4. System.out.println(array[i]);
    5. }
    6. }

     数组是引用类型

    基本类型变量与引用类型变量的区别

    基本数据类型创建的变量称为基本变量,该变量再空间中直接存放的是其所对应的值。

    引用数据类型创建的变量,称为对象的引用,该变量在空间中存储的是对象所在空间的地址。

    引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该
    地址,引用变量便可以去操作对象

     引用变量

    来看一道例题:

    1. public static void func() {
    2. int[] array1 = new int[3];
    3. array1[0] = 10;
    4. array1[1] = 20;
    5. array1[2] = 30;
    6. int[] array2 = new int[]{1,2,3,4,5};
    7. array2[0] = 100;
    8. array2[1] = 200;
    9. array1 = array2;
    10. array1[2] = 300;
    11. array1[3] = 400;
    12. array2[4] = 500;
    13. for (int i = 0; i < array2.length; i++) {
    14. System.out.println(array2[i]); }
    15. }

    大家可以先思考一下,输出了些啥?

    你答对了吗?这里值得注意是是array2[2] 和array2[3]的值是 300和400。

    接下来给大家画图

    值得注意的是数组里面存的是地址,当把array2数组的地址给array1时, 它们就指向了同一个对象。

    认识 null

    null Java 中表示 "空引用" , 也就是一个不指向对象的引用.
    1. int[] arr = null;
    2. System.out.println(arr[0]);
    3. // 执行结果 Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
    null 的作用类似于 C 语言中的 NULL ( 空指针 ), 都是表示一个无效的内存位置 . 因此不能对这个内存进行任何读写操
    . 一旦尝试读写 , 就会抛出 NullPointerException.

    数组的应用场景

    保存数据

    int[] array = new int[]{1,2,3,4};

    把整形数据1,2,3,4存放在数组当中。

    作为函数的参数

    参数传数组类型(引用数据类型)

    1. public static void func2(int[] arr){
    2. arr[0] = 10;
    3. System.out.println(arr[0]);
    4. }
    5. public static void main(String[] args) {
    6. int[] array = new int[]{1,2,3,4};
    7. func2(array);
    8. System.out.println(array[0]);
    9. }

    可以发现在func2内部修改数组内容,方法外部数组内容也会发生改变 。

    因为数组是引用类型,按照引用类型进行传递(传递对象的地址),是可以修改其中存放的内容的。

    再看一个题:以下代码会输出什么?

    1. public static void func1(int[] arr){
    2. arr = new int[10];
    3. }
    4. public static void main(String[] args) {
    5. int[] array ={1,2,3,4};
    6. func1(array);
    7. System.out.println(Arrays.toString(array));//以字符串的形式输出array数组里面的元素
    8. }

    答案是{1,2,3,4}

    虽然arr数组原本指向的对象是数组array1,但是arr数组又重新开辟了空间,指向了新的空间(对象),所以改变arr数组并不影响array这个数组。 

    作为函数的返回值

    1. public static int[] func(int n){
    2. int[] arr = new int[n];
    3. for (int i = 0; i < n; i++) {
    4. arr[i] = i;
    5. }
    6. return arr;
    7. }
    8. public static void main(String[] args) {
    9. int[] array = func(10);
    10. System.out.println(Arrays.toString(array));
    11. }

    二维数组

    二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.
    基本语法:
    1. 数据类型 [][] 数组名称 = new 数据类型 [ ][ ] { 初始化数据 };
    2.数据类型 [][] 数组名称 = new 数据类型 [行数 ][列数 ];
    3. 数据类型 [][] 数组名称 = new 数据类型 [行数 ][ ];
    1. int[][] array = new int[][]{{1,2,3},{4,5,6}};
    2. int[][] array1 = new int[2][3];
    存储形式:

    不规则二维数组 :

    1. int[][] array = new int[2][];
    2. array[0] = new int[3];
    3. array[1] = new int[4];

  • 相关阅读:
    动态规划算法(2)--最大子段和与最长公共子序列
    MySQL Explain性能调优详解
    C. Swap Game #832 div2
    Ansible最佳实践之委派任务和事实
    3. executors
    二叉排序树(BST)和平衡二叉树(AVL)基础概念
    高等教育学:教育研究与科学研究(完)
    Android Studio中Spinner控件的使用方法2-2
    C# TCP通讯大族激光打标机
    mapper.xml中的sql标签
  • 原文地址:https://blog.csdn.net/qq_62712350/article/details/126114677