数组:一组相同类型的数据集合,长度固定
一维数组:
方式1:
先声明数组(定义数组):尚未开辟内存空间
再创建数组:在内存中,根据数组长度,开辟一块"连续"的内存空间,并完成初始化(默认值)
数据类型 | 默认值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
char | 空字符 |
boolean | false |
String | null |
String[] array01;
array01 = new String[10];
方式2:声明+创建
double[] array02 = new double[6];
方式3:声明 + 自定义初始化
char[] array03 = { '鼠', '牛', '虎', '兔', '龙', '蛇' };
二维数组:
方式1:声明 + 创建 二维数组 (规则)
int[][] array03 = new int[5][3]; // 包含5个一维数组,每个一维数组的长度为3
int array04[][] = new int[7][10]; // 包含7个一维数组,每个一维数组的长度为10
array03[2][1] = 1024; // 访问二维数组中的元素:将1024存入第3个一维数组中的第2个元素中
方式2:声明 + 创建 二维数组(不规则)
int[] array05[] = new int[4][];// 包含4个一维数组,每个一维数组的长度不固定
array05[0] = new int[5];
array05[1] = new int[2];
array05[2] = new int[7];
array05[3] = new int[9];
方式3:声明 + 创建 + 初始化值
int[][] array06 = { { 1, 3, 5 }, { 2, 4, 6, 8 }, { 11, 21, 31, 41, 51 } };
Arrays工具类:提供数组的常见操作
常用方法:
1.Arrays.toString( ):元素转换为字符串内容
String[] array01 = { "S水瓶座", "B白羊座", "J金牛座", "T天蝎座", "C处女座","B白糖座" };
String result01 = Arrays.toString(array01);
System.out.println(result01);
输出结果:
[S水瓶座, B白羊座, J金牛座, T天蝎座, C处女座, B白糖座]
2.Arrays.sort( ) :排序(快速排序算法实现,默认升序)
int[] array02 = { 12, 17, 10, 22, 19, 14, 25 };
Arrays.sort(array02);
System.out.println("排序后:" + Arrays.toString(array02));
Arrays.sort(array01); //字符串排序,按照字符的编码值排序
System.out.println("排序后:" + Arrays.toString(array01));
输出结果:
排序后:[10, 12, 14, 17, 19, 22, 25]
排序后:[B白糖座, B白羊座, C处女座, J金牛座, S水瓶座, T天蝎座]
3.Arrays.binarySearch(数组,指定元素):对已排序的数组,进行指定元素的查找
- 如果找到,返回该元素的位置下标(大于等于零的一个值)
- 如果没有找到,返回负数
char[] chs = { 'E', 'B', 'C', 'A', 'D', 'F' };
System.out.print("排序前:");
System.out.println(chs);
Arrays.sort(chs); // 排序
System.out.print("排序后:");
System.out.println(chs);
int index = Arrays.binarySearch(chs, 'X');
System.out.println("位置: " + index);
输出结果:
排序前:EBCADF
排序后:ABCDEF
位置: -7
4.Arrays.equals(数组1,数组2):比较两个数组内容是否一致
int[] array01 = { 1, 3, 5, 7, 9 };
int[] array02 = { 1, 3, 5, 7, 9 };
boolean result2 = Arrays.equals(array01, array02);
System.out.println(result2);
输出结果:
true
5.Arrays.fill(数组,自定义默认元素):自定义数组的默认元素
int[] numbers = new int[10];
Arrays.fill(numbers, -2);//默认元素为-2
System.out.println(Arrays.toString(numbers));
输出结果:
[-2, -2, -2, -2, -2, -2, -2, -2, -2, -2]
6.Arrays.copyOf(旧数组,复制元素的个数):实现数组的全部或局部复制
String[] array01 = { "北京市", "天津市", "重庆市", "上海市", "西安市", "铜川市" };
String[] array03 = Arrays.copyOf(array01, array01.length); // 全部复制
String[] array04 = Arrays.copyOf(array01, 3); // 局部复制
System.out.println("[数组1]:" + Arrays.toString(array01));
System.out.println("[数组3]:" + Arrays.toString(array03));
System.out.println("[数组4]:" + Arrays.toString(array04));
输出结果:
[数组1]:[北京市, 天津市, 重庆市, 上海市, 西安市, 铜川市]
[数组3]:[北京市, 天津市, 重庆市, 上海市, 西安市, 铜川市]
[数组4]:[北京市, 天津市, 重庆市]
补充:
System.arraycopy() 作用:实现数组的全部或局部复制
System.arraycopy(src, srcPos, dest, destPos, length);
// 参数src : 代表旧数组
// 参数srcPos : 代表旧数组复制的开始位置
// 参数dest : 代表新数组
// 参数destPos : 代表新数组的插入开始位置
String[] array05 = new String[array01.length];
System.arraycopy(array01, 0, array05, 0, array01.length); // 全部复制
String[] array06 = new String[array01.length];
System.arraycopy(array01, 2, array06, 0, 3); // 局部复制(从下标2开始复制3个元素至新数组)
System.out.println("[数组5]:" + Arrays.toString(array05));
System.out.println("[数组6]:" + Arrays.toString(array06));
输出结果:
[数组5]:[北京市, 天津市, 重庆市, 上海市, 西安市, 铜川市]
[数组6]:[重庆市, 上海市, 西安市, null, null, null]
7.Arrays.deepToString(数组):深度遍历,将二维及多维数组转成字符串
int[][] array06 = { { 1, 3, 5 }, { 2, 4, 6, 8 }, { 11, 21, 31, 41, 51 } };
System.out.println(Arrays.deepToString(array06));
输出结果:
[[1, 3, 5], [2, 4, 6, 8], [11, 21, 31, 41, 51]]