欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java:一维数组

程序员文章站 2022-06-29 09:48:01
...
  • 数组

    数组定义和访问

    容器的概念

    ​ 容器: 就是将多个数据存储到一起,每个数据称为该数据的元素.

    数组概念

    ​ 数组就是存储数据长度固定的容器,保证每个数据的数据类型要一致.

    数组的定义

    方式1:

    ​ 格式:

    数组存储的数据类型[]  数组名称 = new 数组存储的数据类型[长度(>=0的整数)];
    

    ​ 解析:

    ​ 数组存储的数据类型:决定了该数组容器能够存储什么样的数据

    ​ [ ] 表示数组

    ​ 数组名称:给定义数组起一个变量的名字,满足标识符的命名规范

    ​ new : 关键字,创建数组使用的关键字。

    ​ 数组存储的数据类型:决定了该数组容器能够存储什么样的数据

    ​ [长度] : 数组的长度 表示数组中能够存储多少个元素

    ​ 备注: 数组一旦创建,长度不能发生改变,数组具备一个[定长特性]。

    方式2:

    格式:

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

    方式3

    ​ 格式:

  ``
  数组的数据类型[] 数组名称 = {元素1,元素2,....};
  例如:
    String[] names = {"陈杨","夏凡","你爹"};
    char[] sex ={"男","女","无"};
  

数组的特点:

1.数组的长度在程序运行期间不可改变.

2.数组本身就是一种引用数据类型

3.数组定义时是引用数据类型,但是数组容器里面存储的元素可以是基本数据类型也可以是引用数据类型

4.数组当中存储的多个数据,类型保持一致

数组初始化: 在内存当中创建了一个数组,并且向数组容器中赋予一些默认值

默认值:

​ 对于int整数类型来说,默认值是0

​ 对于浮点数类型来说,默认值是0.0

​ 对于字符类型来说,默认值是"\u0000"显现是一个空格

​ 对于布尔类型来说,默认值是false

​ 对于引用类型来说,默认值是null

两种常见的初始化动作:

  1. 静态初始化(指定内容): 在创建数组的时候,不指定数组的长度(存储元素的个数),而是直接指定具体的【内容】

  2. 动态初始化(指定长度):在创建数组的时候,直接指定数组的长度(存储元素的个数).

 备注:静态初始化虽然没有直接指定长度,但是程序会推算得到该数组的长度.

 建议

​ 如果不确定数组当中存储的内容时,用动态初始化,反之内容已经确定了,使用静态初始化.

​ 大多数情况下,建议使用动态初始化.

数组的访问:

​ 索引:下标

​ 每一个存储到数组当中的元素,都会自动的分配一个编号,从[0]开始,这个系统自动分配的编号称为数组的索引

(index),可以通过索引访问数组当中的元素.

​ 格式:

  数组名称[索引]  

数组的长度属性

 每个数组都有长度,而且是固定的,Java会自动赋给数组一个属性,可以获取到数组的长度属性

​ 格式:

​ 数组名称.length

​ 属性length代表的就是数组的长度,int类型 数组的最大索引值 :[数组名称.length-1]

索引访问数组当中的元素操作

​ 修改数组当中索引对应上的值: 数组名[索引] = 数值;

​ 变量 = 数组名称[索引], 从数组当中取出一个数值赋值给一个变量

数组原理内存

 内存

​ 内存是计算机中一个很重要的原件,临时存储区域,作用是当程序运行过程中,我们编写的代码文件存放在硬盘当中,硬盘当中的程序文件不会运行,存放到内存当中,当程序运行完毕后程序会清空内存.

Java虚拟机当中的内存划分

为了提高运行效率,就对内存空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式

JVM内存划分

区域名称 作用
寄存器 给cpu使用,和我们开发没有关系
本地方法栈 JVM在使用操作系统功能时使用的,和我们的开发没有关系
方法区 存储可以运行的class文件(常量值,静态域)
方法栈(stack) 方法运行时使用的内存,比如说main方法,进入方法栈当中运行
堆内存(heap) 存储对象或者数组,new出来的对象,都统统存储在对内存当中

数组在内存当中的存储

public static void main(String[] args){
    int[] arr = new int[3];
    System.out.println(arr);//内存当中的哈希值 
}

​ 程序执行流程

  1. main方法进入方法栈中执行
  2. 创建数组,JVM会在堆内存当中开辟空间,存储数组
  3. 数组在内存当中会有自己的内存地址,以十六进制表示
  4. 数组当中有三个元素,默认值为0
  5. JVM将数组的内存地址赋值给引用类型变量arr
  6. 变量arr保存的数组是在内存当中的地址,而不是具体的值

两个变量指向同一个数组、

public static void main(String[] args){
    // 定义一个数组动态初始化
    int[] arr = new int[3];
    // 通过索引访问数组当中的元素
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    // 查看第二个元素
    System.out.println(arr[1]);
    int[] arr2 = arr;
    arr2[1] = 50;    
    System.out.println(arr[1]);
    
}

数组的常见操作

​ 数组的越界异常操作

 public static void main(String[] args){
     int[] arr = new int[5];
     System.out.println(arr[5]);
 }

数组索引是从0开始,最大索引值是arr.length-1 [0,arr.length-1 ]

如果访问数组元素时,索引值不在该区间中,程序就会抛出数组索引越界异常

在开发中,不要出现索引越界异常现象,因为它在导致程序异常终止

public static void main(String[] args){
  int[] arr = new int[3];
    arr = null;
     System.out.println(arr[2]);
}

数组的空指针异常,就是在程序运行过程中,有一个在内存当中不存在的一个变量被引用到了

数组遍历【重点】

数组遍历:就是将数组中的每一个元素分别获取出来,就是遍历,遍历是我们操作数组的核心和重点内容.

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

获取数组当中最大值元素

1.定义一个最大值变量:从数组的所有元素找出那个最大值(数组当中索引值为0)

2.遍历数组,获取数组当中的每一个元素

3.将遍历到的元素和保存的最大值变量进行比较

4.如果数组元素的大于最大值变量,就把数组元素赋值给最大值变量

5.数组遍历结束,最大值变量保存的就是数组中最大值

public static void main(String[] args){
        int[] arr = {1, 2, 5, 6, 9, 54, 65};
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.println(max);
}
相关标签: java