zoukankan      html  css  js  c++  java
  • 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;
    }
    

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

  • 相关阅读:
    HDU 1025 Constructing Roads In JGShining's Kingdom (DP+二分)
    HDU 1158 Employment Planning
    HDU 2059 龟兔赛跑
    Csharp 简单操作Word模板文件
    Csharp windowform datagridview Clipboard TO EXCEL OR FROM EXCEL DATA 保存datagridview所有數據
    Csharp 讀寫文件內容搜索自動彈出 AutoCompleteMode
    Csharp windowform controls clear
    CSS DIV大图片右上角叠加小图片
    Csharp DataGridView自定义添加DateTimePicker控件日期列
    Csharp 打印Word文件默認打印機或選擇打印機設置代碼
  • 原文地址:https://www.cnblogs.com/anke-z/p/12376895.html
Copyright © 2011-2022 走看看