JAVA 数组
数组的概念及定义
数组 是 Java程序中提供的一种最简单的数据结构
可以用来存储一个元素
个数固定
且
类型相同
的有序 集
数组 储存在堆内存中
-
栈:主要用于运行函数的内存
-
堆:主要用于存储数据对象的内存
对于数组
- 数组本质上就是在堆内存中一系列地址连续且空间大小相等的存储空间(变量),每一个存
储空间用来存储数据(基本,引用)- 数组是在堆内存中存储,称之为是一个对数对象,并且在堆内存中存储的数据都有 默认初始 化 的流程。
所以数组创建之初,每一个存储空间里面都会被 JVM 初始化该数据类型对应的零值。- 数组的地址是连续的,所以通过公式:An=A1+(n-1)*d可以快速访问到其他的元素,所以对于
- 数组而言查找元素比较快的。将元素的真实物理地址转换成对应的角标获取元素。
- 如何来调用数组呢?通过一个变量存储该数组在堆内存当中的首元素的地址。 当数组一旦定义出来,其长度不可变,存储空间的内容是可变的 所以我们在定义数组的时候,要么把长度固定,要么直接输入相关的元素
定义数组的方式
// 创建一个指定长度且指定数据类型的一维数组,名称为数组名,虽然没有指定元素,但是会有默认值数据类型 [] 数组名 = new 数据类型 [ 长度 ];// 创建一个指定元素且指定数据类型的一维数组,名称为数组名,虽然有指定元素,还是有默认初始化这个步骤的!数据类型 [] 数组名 = new 数据类型 []{ 数据 1 , 数据 2 ,..., 数据 n };数据类型 [] 数组名 = { 数据 1 , 数据 2 ,..., 数据 n };- 对于一个数组来说 数组名代表了在栈中的变量空间 储存的是数组在堆内存中第一个元素的地址
常见的数组操作
- 数组遍历
public class Sample { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5,6,7,8,9}; //String str str.length()-函数 //int[] arr arr.length-属性 for (int i = 0; i < arr.length; i++) { arr[i] = arr[i] * 10; System.out.println(arr[i]); } //通过角标遍历 可以在遍历的过程中对指定的元素进行修改 //foreach遍历 主要针对的是一些可迭代对象 Iterable /* for (数据类型 变量名 : 可迭代容器) { }*/ for (int num : arr) { //num -> arr[i] num = num / 10; System.out.println(num); }//这种遍历方式 只能获取元素,不能修改元素 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
- 数组最值问题
public class Sample { public static void main(String[] args) { int[] arr = new int[]{3,6,8,2,9,4,5,1,7}; int min = arr[0]; int max = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] < min) { min = arr[i]; } if (arr[i] > max) { max = arr[i]; } }System.out.println(max); System.out.println(min); } }
- 数组扩容问题
public class Sample { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5}; arr = add(arr,6); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } //在指定的数组arr中添加元素element public static int[] add(int[] arr, int element) { int[] newArr = new int[arr.length + 1]; for (int i = 0; i < arr.length; i++) { newArr[i] = arr[i]; } newArr[newArr.length - 1] = element; return newArr; } }