一、定义
数组指的就是⼀组相关类型的变量集合,并且这些变量可以按照统⼀的⽅式进⾏操作。
二、数组初始化
数组是引⽤数据类型,有内存分配问题。
1.数组动态初始化(声明并开辟数组):
数据类型[] 数组名称 = new 数据类型 [⻓度] ;
例如定义一个 int型数组:
public class ArrayDemo{
public static void main(String[] args) {
int[] x = new int[3] ; // 开辟了⼀个⻓度为3的数组
System.out.println(x.length) ;
x[0] = 1 ; // 数组第⼀个元素
x[1] = 2 ; // 数组第⼆个元素
x[2] = 3 ; // 数组第三个元素
for (int i = 0; i<x.length ; i++) {
System.out.println(x[i]) ; // 通过循环控制索引下标更改
}
}
}
2、数组静态初始化
在之前的数组定义都有⼀个明显特点:数组⾸先先开辟内存空间,⽽后再使⽤索引进⾏内容的设置,这种定义数组的⽅式称为动态初始化;⽽如果希望数组在定义的同时可以设置内容,那么就可以采⽤静态初始化。
数据类型[] 数组名称 = new 数据类型[] {值,值,....}
示例:
public class ArrayDemo{
public static void main(String[] args) {
int[] x = {1,2,5,55,555,223,45545,666465,6443} ; // 静态初始化定义数组
System.out.println(x.length) ;
for (int i = 0; i<x.length ; i++) {
System.out.println(x[i]) ;
}
}
}
数组最⼤的缺陷:⻓度固定(存在越界问题)
三、二维数组
我对于二维数组的理解是,二维数组就以一个一维数组,只不过他的每一个元素又是一个一维数组。
初始化:
1静态初始化:
数据类型[][] 对象数组 = new 数据类型[][]{{值,值,..},{值,值,..},..} ;
2动态初始化:
数据类型[][] 对象数组 = new 数据类型[][]{{值,值,..},{值,值,..},..} ;
示例: 定义一个二维数组:
public class ArrayDemo{
public static void main(String[] args) {
// 数组并不是等列数组
int[][] data = new int[][] {
{1,2,3},{4,5},{6,7,8,9}
};
// 在进⾏输出的时候⼀定要使⽤双重循环
for (int x = 0; x<data.length ; x++) {
for (int y = 0; y<data[x].length ; y ++) {
System.out.println("data{"+x+"]
["+y+"]="+data[x][y]+"、") ;
}
System.out.println();
}
}
}
四、数组拷贝
拷贝对于基本类型来说他是深拷贝
4种拷贝方式:对于引用类型来说都是浅拷贝。
四种方式:
- 利用for语句
示例:
public static void main3(String[] args) {
int[] array = {1,2,23,4,15,6,7,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));
}
- clone
示例
public static void main5(String[] args) {
int[] array = {1,2,23,4,15,6,7,8,9};
int[] array2 = new int[array.length];
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
array2 = array.clone();
array2[0] = 100;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
- System.arraycopy()
示例;
public static void main(String[] args) {
int[] array = {1,2,23,4,15,6,7,8,9};
int[] array2 = new int[array.length];
System.out.println("array2:"+array2);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
System.arraycopy(array,0,array2,0, array.length);
System.out.println("array2:"+array2);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
4Arrays.copyOf()
示例
public static void main(String[] args) {
int[] array = {1,2,23,4,15,6,7,8,9};
int[] array2 = new int[array.length];
System.out.println("array2:"+array2);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
array2 = Arrays.copyOf(array,array.length);
System.out.println("array2:"+array2);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
四种拷贝方式中System.arraycopy() 这种方式速度最快 因为底层代码是有c/c++编写的。