1数组的概念
数组指的是一组相关类型的变量集合。并且这些变量可以按照统一的方式进行操作。
2动态初始化
数据类型 [ ] 数组名称 = new 数据类型 [长度]
int [] array = new int [5];//数组是引用类型,牵扯内存分配问题
可通过数组下标进行索引
array[0]=1;//数组第一个元素赋值为1
array[1]=2;//数组第二个元素赋值为2
array[2]=3;//数组第三个元素赋值为3
另一种定义数组的方法
int[] array = null ;
array = new int[3] ;//数组属于引用类型,使用前一定要开辟空间,否则会出现NullPoninterException
3数组的静态初始化
在动态初始化中数组首先开辟空间,然后借助索引对数组内容进行设置。而静态初始化则是在定义数组时就可以设置数组的内容。
int[] array = {1,2,3,4,5} ; //静态初始化
切记:静态初始化时 [ ] 内不可添加数组长度
完整的写法为
int[] array=new int []{1,2,3,4,5};
4 引用传递
首先我们知道在数组中可借用length动态获得数组长度,
array.length
看下面一段代码
int[] array1= null ;
int[] array2 = null ; // 声明对象
array1 = new int[3] ;
System.out.println(x.length) ;
array1[0] = 1 ; // 数组第一个元素赋值为1
array1[1] = 2 ; // 数组第二个元素赋值为2
array1[2] = 3 ; // 数组第三个元素赋值为3
for (int i = 0; i<array1.length ; i++) {
System.out.println(array1[i]) ; // 通过循环控制索引下标遍历数组
}
array2 = array1 ; // 引用传递时不要出现 []
array2[0] = 5 ; //利用索引下标将数组第一个元素更改为5
引出一个概念:(这里将出现一个传送门,记录堆和栈的学习笔记)
一块栈内存只能保存一个堆内存地址
同一块堆内存地址可以被不同栈内存所指
array2 = array1 ; // 引用传递时,就是同一块堆内存地址被不同栈内存地址所指
5二维数组
5.1概念理解
将二维数组看成一维数组,只不过每个数组元素又是一个数组
5.2动态初始化
类似一维数组的动态初始化,多加一个[] 即可
int [][] array = new int [5] [3];//可看作5行3列的矩阵,通过下标索引精确找到每个元素
5.3静态初始化
类似一维数组的静态初始化,多加一个[]即可
int [][] array=new int[][]{{2,3},{4,5},{6,7}};//一个3行2列的矩阵
6数组的拷贝
常见的有4种拷贝方式:
for循环实现拷贝
public class Test2 {
public static void main(String[] args) {
int[] array1 = new int[] { 1,2,3,4,5};
int[] array2 = {1,1,1,1,1};
for(int i=0;i<array1.length;i++){
array2[i]=array1[i];
}
for (int i=0 ;i<array2.length;i++) {
System.out.println(array2[i]);
}
}
}
int [] array2=array1.clone()
import java.util.Arrays;//调用了toString方法需要加包
public class Test2 {
public static void main(String[] args) {
int [] array1 = new int []{1,2,3,4};
int [] array2 = array1.clone();//将array1复制给array2
System.out.println(Arrays.toString(array2)); //toString方法以字符串形式打印数组
}
}
Arrays.copyOf(源数组名称,新数组长度)
import java.util.Arrays; //需添加对应的包
public class Test2 {
public static void main(String[] args) {
int[] array1 = new int[] { 1,2,3,4,5};
int[] array2 = Arrays.copyOf(array1, 10);
for (int i: array2) { //for循环打印数组的变体
System.out.println(i); //注意括号内是变量i而非array2[i]
}
}//源数组长度为5,使用Arrays.copyOf时,新数组长度为10,不够的部分自动补0
}
System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度) //拷贝速度最快
import java.util.Arrays;//需添加对应的包
public class Test2 {
public static void main(String[] args) {
int[] array1 = new int[] { 1,2,3,4,5};
int[] array2 = {1,1,1,1,1};
System.arraycopy(array1,2,array2,1,3);
for (int i = 0;i<array2.length;i++) {
System.out.println(i);
}
}//保证新数组的复制起点+复制长度 !> 新数组长度
}