如果需要存储大量的数据,,这时就需要数组的作用。
数组的概念
数组是存储很多个同一数据类型的值的容器,数组是同一数据类型的集合,数组其实是存储数据的一种方式,数组一旦定义好,里面的数据类型即确定。特点:类型相同,长度固定,数组从0开始编号第一个数字。
数组的定义
数组的创建:
元素数据类型[] 数组名 =new 元素类型[元素个数或数组长度]
int[] arr=new int [5]
声明数组变量 必须在程序中声明数组,并指定数据类型,标识数组我们用[] 来标识,定义数组的名称arr,格式为int[] arr
创建数组 要使用一个新的关键字叫做new,new用来在内存中产生一个容器实体,数据要存储时需要空间的,空间就用new操作符开辟new int[5],表示这个数组有5个int元素,这个部分就是在内存中定义了一个真实存在的数组,能存储5个元素,注意这里是做了两件事情,第一件是创建了一个数组,然后把这个数组的引用赋值给变量x
注意这个arr不是int类型的,int只是这个容器内元素的数组类型,数组其实是单独的数据类型,数据类型有两大派,第一大是引用数据类型,第二派是基本数据类型,数组就是引用数据类型。
定义数组有两种格式:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr1 = new int[5];
示例:float[] arr2 = new float[5];
格式二:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr1 = new int[]{3,5,1,7};
float[] arr2 = {1.3,1.5,1.1,1.7};
注意的是:在给数组分配空间的时候,必须指定数组能存储的元素个数来确定数组的大小,体现了数组长度固定这一特点,
数组的初始化
数组的声明与赋值
int arr[]=new int [2];
a[0]=10;
a[1]=20;
另一种方式也可以直接明确数组的长度,以及数组中的内容:
int[] arr=new int[]{20,30,40};
int[] arr={30,20,40};
如果不写new就一定要指定数组的内容
数组下标的有效范围与常见的异常
1.ArrayIndexOutOfBoundsException 索引值越界异常。 也就是数组下标超出了有效范围。
例如创建一个int[] arr=new int[2];
如果程序输出a[3]的话就会报错,原因是
它的有效下标是0,1,2,并没有3.一旦我们访问不在范围内的下标,就会产生数组下标越界异常。
2.NullPointerException 空指针异常 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
数组内存分析
栈内存:栈内存存储的都是局部变量,变量一旦出了自己的作用域,那么就会马上在内存中消失,释放内存空间。
堆内存:堆内存存储的都是对象内存,对象一旦用完不是马上从内存中消失,而是等待垃圾回收器不定时把垃圾对象回收,这个时候对象消失,释放内存。
凡是以new关键字创建的对象,jvm都会在堆中开辟一个新的空间创建一个新的对象。对象如果没有变量引用,它就是垃圾对象。
创建二维数组
二维数组可以看作是特殊的一维数组,有两种声明的方式:
数组元素类型 数组名字[][]; 数组元素类型[][] 数组名字; int arr1[][]; char[][] arr2;
二维数组也要用new关键字来分配内存,然后才可以访问每个元素,为二维数组分配内存有两种方式
int a[][];
a = new int[2][4]; //直接分配行类
int b[][];
b = new int[2][]; //先分配行,再分配列
b[0] = new int[2]; //给第一行分配列
b[1] = new int[2]; //给第二行分配列
创建二维数组的时候可以只声明列的数量,但是只说明行的数量就是错误的。
二维数组的赋值
public class InitTDArray {
public static void main(String[] args) {
/* 第一种方式 直接赋值*/
int tdarr1[][] = { { 1, 3, 5 }, { 5, 9, 10 } };
/* 第二种方式 用new的方法*/
int tdarr2[][] = new int[][] { { 65, 55, 12 }, { 92, 7, 22 } };
/* 第三种方式 分配内存对元素分别赋值*/
int tdarr3[][] = new int[2][3]; // 先给数组分配内存空间
tdarr3[0] = new int[] { 6, 54, 71 }; // 给第一行分配一个一维数组
tdarr3[1][0] = 63; // 给第二行第一列赋值为63
tdarr3[1][1] = 10; // 给第二行第二列赋值为10
tdarr3[1][2] = 7; // 给第二行第三列赋值为7
}
}
数组的基本操作
1.遍历数组,即获取数组中的每一个元素,用两层for循环来实现,通过length来获取数组的长度
例子:
public class Trap {
public static void main(String[] args) {
int b[][] = new int[][] { { 1 }, { 2, 3 }, { 4, 5, 6 } }; // 定义二维数组
for (int k = 0; k < b.length; k++) { // 循环遍历二维数组中第一个索引
for (int c = 0; c < b[k].length; c++) { // 循环遍历二维数组中第二个索引
System.out.print(b[k][c]); // 将数组中的元素输出
}
System.out.println(); // 输出换行
}
}
注意a.length返回的是数组的行数,a[0].length返回的是第一行的列的数量
填充和替换数组中的元素
使用fill()方法
import java.util.Arrays; //导入java.util.Arrays类
public class Swap {
public static void main(String[] args) {
int arr[] = new int[5]; // 创建int型数组
Arrays.fill(arr, 8); // 使用同一个值对数组进行填充
for (int i = 0; i < arr.length; i++) { // 循环遍历数组中的元素
// 将数组中的元素依次输出
System.out.println("第" + i + "个元素是:" + arr[i]);
}
}
}