导图社区 数组
这是一篇关于java的数组知识点的思维导图,数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
编辑于2021-08-29 11:59:29数组
概述
定义
①是多个相同类型数据一定顺序排列的集合
②并使用一个名字命名
③并通过编号的方式对这些数据进行统一管理
相关概念
数组名
元素
角标、下标、索引
数组的长度:元素的个数
特点
①数组是有序排列的
②数组属于引用数据类型,数组的元素可以是基本数据类型,也可以是引用数据类型
③创建数组对象会在内存中开辟一整块连续的空间
④数组的长度一旦确定,就不能更改
数组的分类
照维数
一维数组
二维数组
照数组元素的类型
基本数据类型的数组
引用数据类型的数组
一维数组
声明与初始化
声明
int num; int[ ] ids;
初始化
静态初始化
ids = new int[ ]{1001,1002,1003,1004};
初始化与元素的赋值同时进行
动态初始化
String[ ] names = new String[5];
初始化与元素的赋值分开进行
一维数组元素的引用
通过角标的方式调用 names[0] = "王铭"; names[1] = "王赫"; names[2] = "张学良"; names[3] = "孙居龙"; names[4] = "王宏志";
数组的length属性
System.out.println(names.length); System.out.println(ids.length);
数组的遍历
for(int i = 0;i < names.length;i++){ System.out.println(names[i]); }
数组的默认初始化值
数组元素是整型:0 数组元素是浮点型:0.0 数组元素是char型:0或'\u0000',而非'0' 数组元素是boolean型:false 数组元素是引用数据类型:null
一维数组的内存解析

二维数组
初始化
静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
动态初始化
①String[][] arr2 = new String[3][2]; ②String[][] arr3 = new String[3][];
二维数组元素的调用
System.out.println(arr1[0][1]); System.out.println(arr2[1][1]); arr3[1] = new String[4]; System.out.println(arr3[1][0]); System.out.println(arr3[0]);
遍历二维数组元素
for(int i = 0;i < arr4.length;i++){ for(int j = 0 ; j < arr4[i].length ; j++){ System.out.print(arr4[i][j] + " "); } System.out.println(); }
二维数组元素的默认初始化值
规定:二维数组分为外层数组的元素,内层数组的元素 * int[][] arr = new int[4][3]; * 外层元素:arr[0],arr[1]等 * 内层元素:arr[0][0],arr[1][2]等 * 数组元素的默认初始化值 * 针对于初始化方式一:比如:int[][] arr = new int[4][3]; * 外层元素的初始化值为:地址值 * 内层元素的初始化值为:与一维数组初始化情况相同 * * 针对于初始化方式二:比如:int[][] arr = new int[4][]; * 外层元素的初始化值为:null * 内层元素的初始化值为:不能调用,否则报错。
二维数组的解析

数组的常见算法
赋值
array2 = array1; 将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体
复制
array2 = new int[array1.length]; for(int i = 0;i < array2.length;i++){ array2[i] = array1[i]; } 我们通过new的方式,给array2在堆空间中新开辟了数组的空间。将array1数组中的元素值一个一个的赋值到array2数组中
反转
方法一: for(int i = 0 ; i < arr.length / 2 ; i++){ String temp = arr[i]; arr[i] = arr[arr.length - i -1]; arr[arr.length - i -1] = temp; } 方法二: for(int i = 0,j = arr.length - 1;i < j;i++,j--){ String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }
查找
线性查找
思想:通过遍历的方式,一个一个的数据进行比较、查找
具有普遍适用性
二分法查找
思想:每次比较中间值,折半的方式检索
前提:数组必须有序
排序算法
选择排序
直接选择排序
堆排序
交换排序
冒泡排序
int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99}; for(int i = 0;i < arr.length - 1;i++){ for(int j = 0;j < arr.length - 1 - i;j++){ if(arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
快速排序
插入排序
直接插入排序
折半插入排序
Shell排序
归并排序
桶式排序
基数排序
Arrays工具类的使用
概念理解
定义在java.util包下
Arrays:提供了很多操作数组的方法
几个常见的使用
判断两个数组是否相等(equals)
用法:boolean equals(int[] a,int[] b); 实例: int[] arr1 = new int[]{1,2,3,4}; int[] arr2 = new int[]{1,3,2,4}; boolean isEquals = Arrays.equals(arr1, arr2); System.out.println(isEquals);
输出数组信息(toString)
用法:String toString(int[] a) 实例:System.out.println(Arrays.toString(arr1));
将指定值填充到数组之中(fill)
用法: void fill(int[] a,int val) 实例: Arrays.fill(arr1,10); System.out.println(Arrays.toString(arr1));
对数组进行排序(sort)
用法:void sort(int[ ] a) 实例:Arrays.sort(arr2); System.out.println(Arrays.toString(arr2));
在数组中进行查找(binarySearch)
用法:int binarySearch(int[] a,int key) 实例: int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333}; int index = Arrays.binarySearch(arr3, 210); if(index >= 0){ System.out.println(index); }else{ System.out.println("未找到"); }
数组的常见异常
数组角标越界异常
ArrayIndexOutOfBoundsException
空指针异常
NullPointerException