数组
数组定义
定义格式:
- 数据类型[] 数组名 = new 数据类型[数组长度]; (动态初始化)
- int[] arr = new int[5];
- 变形:数据类型 数组名[] = new 数据类型[数组长度];
- int arr[] = new int[5];
- 数据类型[] 数组名 = new 数据类型[]{item1,item2,item3,…};(静态初始化)
- int[] arr = new int[]{13,4,71,33,16};
- 数据类型[] 数组名 = {item1,item2,item3,…};(静态初始化的简化版)
- int[] arr = {13,4,71,33,16};
java 内存分配
- 栈内存(Stack)
- 堆内存(Heap)
- 方法区
- 本地方法栈
- 寄存区
数组的常见操作
遍历
-
标准 for 循环
-
int[] a = {1,2,3,4,5}; for(int i=0;i <a.length - 1;i++) { System.out.println(a[i]); }
-
foreach 方式
int[] a = {1,2,3,4,5}; for(int i : a) { System.out.println(i); }
取最值
int[] arr = {1,2,3,4,5};
int max = arr[0];
for(int i = 1;i < arr.length;i++) {
if(max < arr[i]) {
max = arr[i];
}
}
System.out.println(max);
倒序存放数组
让数组第一个元素与最后一个元素交换,第二个与倒数第二个交换…直到数组的一半为止。
int[] arr = {1,2,3,4,5};
int len = arr.length;
for(int i = 0;i < len / 2;i++) {
int temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
/*for(int i = 0,j = arr.length - 1;i++,j--){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}*/
for(int i : arr) {
System.out.println(i);
}
拼接两个数组
定义第三个数组 C ,长度为另两个数组的长度之和,
然后将 A 赋值给 C 的前半部分,B 赋给后半部分。
int[] a = {1,2,3,4,5};
int[] b = {6,7,8,9,10};
int[] c = new int[a.length + b.length];
for(int i = 0;i < a.length;i++) {
c[i] = a[i];
}
for(int j = 0;j < b.length;j++) {
c[a.length + j] = b[j];
}
for(int k : c) {
System.out.println(k);
}
冒泡排序
int[] arr = new int[] {32,12,53,72,49};
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;
}
}
}
for(int k : arr) {
System.out.println(k);
}
动态扩展
Java中数组是固定长度不能改变的,但实际运用中,经常需要我们动态地扩展数组以适应程序需求。
原理:
-
定义两个数组A、B,B的长度为A的长度+1
-
将A 的数组元素全部赋值给 B
-
然后将 B 的地址 赋值给 A
-
如此就实现了 数组A 的动态扩展
int[] arr = {11,32,26,47}; System.out.println("数组 arr 的初始长度为:" + arr.length); int[] arr2 = new int[arr.length + 1]; for(int i = 0;i < arr.length;i++) { arr2[i] = arr[i]; } arr = arr2; System.out.println("数组 arr 扩展后的长度为:" + arr.length);
多维数组
二维数组
- 数据类型[][] 数组名 = new 数据类型[一维数组的个数][一维数组中元素个数];
- int[][] arr = new int[5][4];
- 数据类型[][] 数组名 = new 数据类型[一维数组个数][];
- int[][] arr = new int[3][];
- 数据类型[][] 数组名 = {{元素1,元素2,元素3,元素4},{元素1,元素2,元素3},{元素1,元素2,元素3,元素4,元素5}};
- int[][] arr = {{1,30,28,5},{21,4,33},{9,18,23,90}};