1.数组的分配
特点:
1.1分配空间连续 2.空间不可扩充 3.空间的存储类型相同
ps:初始化为0或null,Boolean默认false
2.数组的排序
Arrays.sort(a1);//util包中
3.数组的扩充(重点了哦)==
3.1 第一种方法:直接破2333
int a1={1,2,3};
int a2[] = new int[a1.length * 2];
for(int i=0;i<a1.length;i++){
a3[i]=a1[i];
}
a1=a3;
3.2 第二种方法:调用System中的arraycopy()
System.arraycopy(a1,1, a2, 5, a1.length-2);//可以选择copy的起始点和长度
a1=a3;
3.3 第三种方法:调用Arrays中的CopyOf(): 从源码可知本质还是system.arraycopy(),但是方便了从首位copy数组的类型
int a4[] = Arrays.copyOf(a1, 4);
a1 = a4;
其实选择System中的arraycopy()还是Arrays中的CopyOf(): 主要看你的适用类型:
如果是直接从首位开始copy,那后者明显方便了不少,反之你对数组的copy有自己的要求前者更佳
当然 你想要第一种直接破也不是不可以2333
小结:归根究底,数组的扩充就是
1.重新分配一个空间更大的数组,
2.将老数组的内容复制过去
3.将老数组指向新数组的地址
这里你需要了解一点:就是数组的存储空间在堆,然而它的识别变量却在栈里(存储堆对象的地址)
例子:
int test[]=new int[]{1,2,3};//test存储在栈里(堆对象的地址){1,2,3}在堆空间
4.二维数组
其实就是一维数组中存储的不是其他类型变量而是数组,以此类推就是三维、四维数组了呗(冷漠脸)
最后国际惯例,附上我的练习代码君:
package com.jacob.javase;
import java.util.Arrays;
/*
* 数组的详细探讨:
*/
public class ArrayTest {
public static void main(String[] args) {
// 1.数组的分配 特点:1.分配空间连续 2.空间不可扩充 3.空间的存储类型相同 ps:初始化为0或null/
// int a[] = new int[10];
// 2.不同的声明方式:
int a1[] = new int[] { 1, 2, 3 };
// int a2[] = { 2, 3, 4 };
// 思考a1[0]为多少
int b[] = a1;
b[0] = 666;
// 3.数组的排序
Arrays.sort(a1);
// 4.数组的扩充:1.创建一个新数组2.将老数组复制过去3.将老数组指向新数组地址
// 4.1 第一种方法:
int a3[] = new int[a1.length * 2];
// for(int i=0;i<a1.length;i++){
// a3[i]=a1[i];
// }
// a1=a3;
// 4.2 第二种方法:明确了起始位置和复制的长度
// System.arraycopy(a1,1, a3, 5, a1.length-2);
// a1=a3;
// 4.3 第三种方法:直接从首位开始复制(本质还是system.arraycopy())
int a4[] = Arrays.copyOf(a1, 4);
a1 = a4;
// 5.二维及多维数组
// 二维数组的长度
boolean t[][] = { {}, { true } };// 数组已经分配了地址空间,第一个地址空间中没存东西;第二个中存的是true
// 这种命名就相当于 不给初始化的一维数组(所以为null):debug可以清晰的看出来;
boolean t1[][] = new boolean[2][];
boolean t2[] = new boolean[2];
t1[0] = new boolean[3];
t1[1] = new boolean[2];
// System.out.println(t.length + "," + t[0].length + "," + t[1].length);
// System.out.println(t1.length + "," + t1[0] + "," + t1[1]);
// System.out.println(t2.length + "," + t2[0] + "," + t2[1]);
// print1(a1);
print2(t1);
}
// 封装遍历一维数组
public static void print1(int a[]) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
// 封装遍历二维数组
public static void print2(boolean a[][]) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + ",");
}
System.out.println("");
}
}
}
最后:共同学习,一起进步 >,<