九、数组
数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理
1、数组的常见概念
-
数组是引用数据类型的,但数组的元素可以是任意数据类型
-
创建数组对象会在内存中开辟一整块连续的空间
-
数组的长度一旦确定,就不能再修改
-
数组分类:
- 按照维数 一维数组,二维数组
- 按照数组元素的类型:基本数据类型元素的数组、引用数据类型的数组
2、一维数组
2.1、一维数组的定义与初始化
//静态初始化
int[] arr = new int[]{1,2,3};
// 等同于
int[] arr1 = {1,2,3};
//动态初始化
格式:数据类型[] 变量名 = new 数据类型[数组长度]
long[] arr = new long[10]; //能存放10个 long类型数据 的数组
2.2、数组与数组元素的访问
long[] arr = new long[10];
// 直接打印 数组,打印的是数组的地址值
System.out.println(arr);
/*
打印:[J@621be5d1
[:是数组的表示
J:是数组存储数据的数据类型,J表示long类型
@:分隔符
621be5d1:数组在内存中得知
*/
// 索引:数组的索引从0开始,就是数组的长度-1
long l1 = arr[0];
System.out.println(l1); //默认0
2.3、测试数组中的默认值
float[] f = new float[3];
double[] d = new double[3];
char[] c = new char[3];
String[] str = new String[3];
System.out.println(f[0]); //默认0.0
System.out.println(d[0]); //默认0.0
System.out.println(c[0]); //默认空格(\u0000)
System.out.println(str[0]); //默认null
/*
byte 0
short 0
int 0
double 0
float 0.0
double 0.0
boolean false
char \u0000 空
String null
*/
2.4、数组的赋值

2.5、多个数组的内存分配图

2.6、多个变量访问同一数组的内存分配图

2.7、数组中常见报错
- 数组角标越界异常;数组访问不存在的索引
- 空指针异常;访问数组空(null)的指向
3、内存分配
3.1、java中内存分配
栈内存: 方法运行时,进入的内存,局部变量都存放于这块内存中
堆内存: new出来的内容都会进入堆内存,并且会存在地址值
方法区: 字节码文件(.class) 加载时进入的内存
本地方法栈: 调用操作系统相关资源
寄存器: 交给cpu去使用
程序计数器
GC
3.2、jvm结构

4、二位数组
- java语言里提供了支持多维数组的语法
- 如果说一维数组当成几何中的线性图片,那么二维数组就相当于一个表格
- 数组元素 为 一位数组
public static void main(String[] args) {
//1.
// 二维数组静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5}};
int[][] arr2 = {{1,2,3},{4,5}};
// 二维数组动态初始化
String[][] str1 = new String[2][3];
String[][] str2 = new String[3][];
str2[1] = new String[4];
//2.调用数组中指定位置的元素
System.out.println(arr1[0][1]);//2
//3.获取数组的长度
System.out.println(str1.length);//2
System.out.println(str2[0].length);//3
//4.遍历二维数组
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr2[i].length;j++){
System.out.print(arr2[i][j]+" ");
}
System.out.println();
}
//5.二维数组的默认值
//外层数组: 默认值是地址值
//内层数组: 是根据具体的数组类型来判断(和一维数组初始化一样)
//6.内存解析
}

上面图片中如果打印 System.out.println(arr[3][0]);, 会报Exception in thread "main" java.lang.NullPointerException 异常
5、Arrays工具类的使用
java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法
boolean equals(int[] a,int[] b) //判断两个数组是否相等
boolean isEquals = Arrays.equals(arr1,arr2);
String toString(int[] a) //输出数组信息
String str1 = Arrays.toString(arr1);
void fill(int[] a,int val) //将指定值填充到数组之中(替换)
Arrays.fill(a1, value);
注:a1是一个数组变量,value是一个a1中元素数据类型的值,作用:填充a1数组中的每个元素都是value
例如:
boolean[] a1 = new boolean[5];
Arrays.fill(a1,true);
结果 a1[] = {true,true,true,true,true};
void sort(int[] a) //对数组进行排序
Arrays.sort(arr)
int binarySearch(int[] a,int key) //对排序后数组进行二分法检索指定的值,相当于前端的indexOf
int index = Arrays.binarySearch(arr,56); //负数表示未找到

浙公网安备 33010602011771号