• Chapter05【数组】


    第一章 数组的定义和访问

    1.1 容器概述

    • 容器:是将多个数据存储到一起,每个数据称为该容器的元素。
    • 生活中的容器:水杯、衣柜、教室

    1.2 数组的概念

    • 数组概念:是一种容器,可以同时存放多个数据。
    • 特点:
      • 数组是一种引用数据类型
      • 数组当中的多个数据,类型必须统一
      • 数组的长度在程序的运行期间不可改变
    • 初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
    • 两种常见的初始化方式:
      • 动态初始化(指定长度):在创建数组的时候,直接指定数组当中的多个元素。
      • 静态初始化(指定内容):在初始话的时候,不直接指定数据多少个,而是直接将数据的内容进行指定。

    1.3 数组的定义

    1. 动态初始化

    • 动态初始化数组的格式:

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

    • 解析含义:

      左侧数据类型:也就是数组当中保存的数据,全都是统一的数据类型。

      左侧的中括号:代表我是一个数组。

      左侧数组名称:给数组取一个名字

      右侧的new:代表创建数组的动作

      右侧的数据类型:必须和左侧的数据类型保持一致。

      右侧中括号的长度:也就是数组当中可以存多好个数据,是一个int数字。

      int[] arr = new int[3];
      

    2.静态初始化

    • 基本格式:

      数据类型 数组名称 = new 数据类型[]{元素1,元素2,.....};

    • 注意事项:

      虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。

      int[] arr = new int[]{元素1、元素2、元素3、、、};
      

    3.静态初始化省略格式

    • 使用静态初始化数组的时候,格式可以省略

      静态初始化标准格式:

      数据类型【】 数组名称 = new 数据类型【】{元素1,元素2,。。。。}

      省略格式:

      数据类型【】 数组名称 = {元素1,元素2、、}

      int[] arr = {元素1、元素2、、、};
      
    • 注意事项:

    1. 静态初始化没有直接指定长度,但是仍然会自动推算长度。
    2. 静态初始化的标准格式可以拆分为两个步骤。
    3. 动态初始化也可以拆分为两个步骤。
    4. 静态初始化一旦使用省略格式,就不能拆分为两个步骤。
    • 使用建议:

      如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体内容,用静态初始化.

    1.4 数组的访问

    • 索引:每一个存储到数组的元素,都会自动拥有一个编号,从0开始,自动编号称为索引值。

    • 格式:

      数组名【索引】;
      
    • 数组长度属性:每个数组都有长度,而且固定的,可以通过语句 数组名.length获取数组的长度。数组最大的索引值为length-1;

      public static void main(String[] args){
          int[] arr = new int[]{3,6,9,12,23};
          //打印数组长度
          System.out.println(arr.length)
      }
      
    • 访问数组中的元素

      • 数组名[索引] = 数值,为数组中的元素赋值。将会替换掉原来的数值。
      • 变量 = 数组名称 [索引],获取数组中的元素。

    第二章 数组内存图

    2.1 内存的概述

    ​ 内存是计算机中的重要原件,临时存储区域,作用是运行程序。 我们平时编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须存放进内存中才能运行,运行完毕后就会清空内存。

    2.2 java虚拟机的内存划分

    1. 栈(Steck):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。

      局部变量:方法的参数,或者是方法{}内部的变量。

      作用域:一旦超出作用域,立刻从栈内存中消失。

    2. 堆(Heep):凡是new出来的东西,都在堆当中。

      堆内存当中的东西都有一个地址值:16进制,

      堆内存中的数据,都有默认值。规则:

      如果是整数 默认值为0

      如果是浮点数 默认值为0.0

      如果是字符 默认值为'u0000'

      如果是布尔 默认值为false

      如果是引用类型 默认值为null

    3. 方法区(Method Area):存储.class文件相关信息,包含方法的信息。

    4. 本地方法栈(Native Method Stack):与操作系统相关。

    5. 寄存器(Pc Register):与CPU相关。

    2.3 数组在内存中的存储

    1.一个数组的内存图

    涉及知识点:

    1. 方法区:中存放.class相关文件,包含方法信息(主要就是方法信息),如Demo02ArrayOne的main方法
    2. 栈:运行main方法,加载到栈内存当中,并为main方法在栈当中开辟内存空间,这个动作叫做进入栈内存。(进栈)
    3. new出来的东西都在堆当中, 在堆里边开辟一段内存空间。十六进制开头0X表示
    4. 数组在内存空间有自己的内存地址,以十六进制表示。0X开头

    其他:

    十六进制开头0X表示

    数组的名称其实就是一个局部变量

    2.两个数组的内存图

    3.两个变量执行同一个数组

    第三章 数组的常见操作

    3.1常见问题_数组索引越界

    数组的索引编号从0开始,一直到”数组长度-1“为止。

    如果访问数组的编号并不存在,就会发生数组索引越界异常

    报错代码:ArrayIndexOutOfBoundsException

    原因:索引编号写错了

    解决:修改称为正确的索引即可。

    3.2 空指针异常

    所有引用类型变量都可以赋值为一个null值,但其代表为空。

    数组值赋了一个null,没有进行new的创建,就会发生空指针异常。 NullPointerException

    3.3 获取数组的长度

    格式:数组名称.length

    将会得到一个int类型的数字,代表数组的长度。

    数组一旦创建,程序运行期间不可更改,长度不可改变。

    3.4 数组的遍历

    数组遍历:就是将数组中的每个元素分别获取出来。

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

    3.5 获取数组的最大值

    从数组的所有元素中找出最大值

    public static void main(String[] args){
        int max = 0;
        int[] arr = new int[]{3,69,9,66,33};
       	for(int i = 0;i<=arr.length-1;i++){
            if(max<arr[i]){
                max = arr[i];
            }
        }
        System.out.println("最大值是:"+max);
    }
    

    3.6 数组反转

    数组反转:数组中的元素颠倒顺序。

    public static void main(String[] args){
        int[] arr = {1,2,3,5,6};
        /*循环中定义变量min = 0最小索引
        max = arr.length-1最大索引
        */
        for(int min = 0,max = arr.length-1;max>min;max--,min++){
            //利用第三方变量完成数组中的元素交换
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        //反转后,遍历数组
        for(int i= 1;i<arr.length-1;i++){
            System.out.println(arr[i])
        }
    }
    

    第四章 数组作为方法参数和返回值类型

    4.1 数组作为方法参数

    • 任何数据类型都可以作为方法参数。

    • 数组作为方法参数传递,传递的参数是数组内存的地址值。

      public static void mian(String[] args){
          int[] array  = {3,6,9};
          printArray(array);
      }
      /*
      三要素:
      返回值类型:只是进行打印而已,不需要进行其他操作,也没有结果,所以用void;
      方法名称:printArray
      参数列表:必须给数组,才能打印其中的元素,int[] array*/
      public static void printArray(int[] array){
          for(int i = 0;i<array.length;i++){
              System.out.print(array[i]);
          }
      }
      

    4.2 数组作为方法返回值

    数组作为方法的参数,传递进去的其实就是数组的地址值。

    数组作为方法的返回值,返回的其实也是数组的地址值。

    public static void mian(String[] args){
        //调用方法,接收数组的返回值
        //接收到的是数组的内存地址
        int[] arr = gerArray();
        for(int a=0;a<arr.length;a++){
            System.out.print(arr[i])
        }
    }
    public static int[] gerArray(){
        int[] arr = {3,6,9};
        //返回数组的地址,返回到调用者
        return arr;
    }
    

    方法的参数为基本数据类型时,传递的是数据值。方法的参数为引用数据类型时传递的是地址值。

  • 相关阅读:
    开发了那么多项目,你能自己手写个健壮的链表出来吗?【华为云技术分享】
    高性能Web动画和渲染原理系列(3)——transform和opacity为什么高性能【华为云技术分享】
    pringBoot-MongoDB 索引冲突分析及解决【华为云技术分享】
    成为高手前必懂的TCP干货【华为云技术分享】
    Python爬虫从入门到精通——基本库re的使用:正则表达式【华为云技术分享】
    【我的物联网成长记2】设备如何进行选型?【华为云技术分享】
    多云架构落地设计和实施方案【华为云技术分享】
    dom的节点操作
    节点访问关系
    封装class类--分割类名后
  • 原文地址:https://www.cnblogs.com/anke-z/p/12376895.html
Copyright © 2020-2023  润新知