数组
一、数组概述
数组(array)是一种容器,用来存储同种数据类型的多个值。
二、数组的定义格式:
1、数据类型[] 数组名(常用的)
int[ ] array
2、数据类型 数组名[]
int array[ ]
三、数组初始化
Java中的数组必须先初始化,然后才能使用
初始化就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程
1、动态初始化
初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型 [ ] 变量名 = new 数据类型[数组长度];
范例: int [ ] arr = new int[3];
注意: 如果直接打印数组名,出现的是数组在内存中的地址值
例如:[I@10f87f48
2、静态初始化
初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组长度
格式:数据类型 [ ] 变量名 = new 数据类型[ ] { 数据1 , 数据2 , 数据3 , ……} ;
范例: int [ ] arr = new int[ ] { 1 , 2 , 3 } ;
两种初始化方式对比和使用
动态初始化:手动指定数组长度,由系统给出默认初始化值。
对于只明确元素个数,不明确具体数值,推荐使用动态初始化
静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度
对于需求中已经明确了要操作的具体数据,直接静态初始化即可
四、元素访问
数组内部保存的数据的访问方式,根据数组名和索引来访问数组中的数据,索引从0开始
格式:数组名[索引]
索引是数组容器中空间的编号
- 特征①:索引从0开始
- 特征②:索引是连续的
- 特征③:索引逐一增加,每次加1
五、Java中内存分配
栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中
堆内存:new 出来的内容都会进入堆内存,并且会存在地址值
方法区:字节码文件加载时进入的内存
本地方法栈:调用操作系统相关资源(了解)
寄存器:交给CPU去使用(了解)
以数组为例分析的代码在内存中的运行过程:
六、数组操作中容易出现的的问题
索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常
七、数组常见操作
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);
}
}