【博学谷学习记录】超强总结,用心分享 | JavaEE基础语法总结04之数组

81 阅读3分钟

数组

一、数组概述

数组(array)是一种容器,用来存储同种数据类型的多个值。

二、数组的定义格式:

1、数据类型[] 数组名(常用的)

int[ ] array

2、数据类型 数组名[]

int array[ ]

三、数组初始化

Java中的数组必须先初始化,然后才能使用

初始化就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

1、动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

格式:数据类型 [ ] 变量名 = new 数据类型[数组长度];

范例: int [ ] arr = new int[3];

注意: 如果直接打印数组名,出现的是数组在内存中的地址值

例如:[I@10f87f48

image-20220725103417615.png

2、静态初始化

初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组长度

格式:数据类型 [ ] 变量名 = new 数据类型[ ] { 数据1 , 数据2 , 数据3 , ……} ;

范例: int [ ] arr = new int[ ] { 1 , 2 , 3 } ;

两种初始化方式对比和使用

动态初始化:手动指定数组长度,由系统给出默认初始化值。

对于只明确元素个数,不明确具体数值,推荐使用动态初始化

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

对于需求中已经明确了要操作的具体数据,直接静态初始化即可

四、元素访问

数组内部保存的数据的访问方式,根据数组名和索引来访问数组中的数据,索引从0开始

格式:数组名[索引]

索引是数组容器中空间的编号

  • 特征①:索引从0开始
  • 特征②:索引是连续的
  • 特征③:索引逐一增加,每次加1

五、Java中内存分配

栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中

堆内存:new 出来的内容都会进入堆内存,并且会存在地址值

方法区:字节码文件加载时进入的内存

本地方法栈:调用操作系统相关资源(了解)

寄存器:交给CPU去使用(了解)

以数组为例分析的代码在内存中的运行过程:

image-20220725164815417.png

六、数组操作中容易出现的的问题

索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题

空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常

七、数组常见操作

1、遍历

通用格式:

int[] arr = {……};
for(int i=0; i<arr.length; x++) {
arr[i] //对arr[i]进行操作
}

2、求最值

​
public class TestArr01 {
    public static void main(String[] args) {
        //求数组中的最大值
        int arr[] = {12, 18, 33, 11, 50};
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println("max:" + max);
​
        //求数组中的最小值
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]<min){
                min=arr[i];
            }
        }
        System.out.println("min:"+min);
    }
}
​

3、元素求和

​
import java.util.Scanner;
​
public class TestArr02 {
    public static void main(String[] args) {
        //数组元素求和(手动输入)
        Scanner sc=new Scanner(System.in);
        int sum=0;
        int[] arr=new int[5];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数字:");
            arr[i]=sc.nextInt();
        }
        for (int i = 0; i < arr.length; i++) {
            sum+=arr[i];
        }
​
        System.out.println(sum);
​
    }
}
​

4、查找数组中某个数据的索引值

​
import java.util.Scanner;
​
public class TestArr03 {
    public static void main(String[] args) {
        //查找数组中某个数据的索引值
        int arr[]={19,28,37,46,50};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你要查找的元素:");
        int num = sc.nextInt();
        //定义索引值
        //假设要查找的元素在数组中不存在
        int index=-1;
        for (int i = 0; i < arr.length; i++) {
            if(num==arr[i]){
                index=i;
                break;
            }
        }
        System.out.println(index);
    }
}
​