1、基本概念
数组:用于储存多个相同类型数据的集合。
优点:可以使用统一的方式进行管理。
缺点:长度是固定的,有越界的风险。
需要注意:数组属于引用数据类型,因此使用之前必须实例化。
2、一维数组的初始化方式:
(1)动态初始化(很常用):
基本格式:数据类型[] 数组名称 = new 数据类型 [长度] ;
方式一:int[] Array = new int[5];
public class Demo1 {
public static void main(String[] args) {
int[] Array = new int[5]; //开辟空间
for (int i = 0; i < Array.length; i++) {
//Array.Length是数组的属性,得到数组长度
Array[i] = i; //使用for循环初始化
}
}
}
方式二:
int[] Array = null;
Array = new int[5];
(2)静态初始化
完整格式:int[] Array = new int[]{1,2,3,4,5}; -->注意 []里面不能写数字
简化格式: int[] Array = {1,2,3,4,5,6};
3、二维数组的初始化方式:
(1)动态初始化
数据类型[][] 对象数组 = new 数据类型[行个数][列个数] ;
//定义一个3行2列的二维数组
int[][] 2dArray = new int[3][2];
(2)静态初始化
int[][] 2dArray = new int[][]{
//数组并不一定是等列的
{1,2},{3,4,5},{6,7,8,9}
};
4、数组的访问方式:
(1)对一维数组,可以使用for循环遍历、foreach遍历以及Arrays.toString字符打印。
//方式一:for循环遍历
for (int i = 0; i < Array.length; i++) {
System.out.println(Array[i]);
}
//方式二:foreach遍历
for (int i:Array) {
System.out.println(i);
}
//方式三:字符打印
System.out.println(Arrays.toString(Array));
(2)对二维数组,可以使用双重for循环,或者使用Arrays.deepToString字符打印。
//方式1、--->双重for循环遍历
for (int i = 0; i < 2dArray.length; i++) {
for (int j = 0; j < 2dArray[i].length; j++) {
System.out.println("data["+i+"]["+j+"]="+2dArray[i][j]) ;
}
}
//方式2、--->deepToString()
System.out.println(Arrays.deepToString(2dArray));
5、数组的四种拷贝方式:
(要注意每种拷贝方式有无返回值、是否有参数以及参数的个数)
(1)for循环拷贝:
/*for循环拷贝*/
public static void main(String[] args) {
int[] array = {5,2,13,4,25,6,71,8,9};
int[] array2 = new int[array.length];
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
for (int i = 0; i < array.length; i++) {
array2[i] = array[i];
}
array2[0] = 99;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
(2)clone拷贝 : 原内存被回收,新分配一段内存
array2 = array.clone();
(3)System.arraycopy()拷贝:速度最快,因为底层由C/C++实现,使用native标志
//有5个参数
System.arraycopy(array,0,array2,0,array.length);
(4)Arrays.copyof()
array2 = Arrays.copyOf(array,array.length);
总结:四种数组拷贝方式,对基本数据类型来说都是深拷贝;如果数组里面是引用类型,四种拷贝都是浅拷贝。