1、 数组基本概念
① 数组动态初始化( 声明并开辟数组):
数据类型[]数组名称 = new 数据类型 [长度]
例如:int[] x = new int[3] ; // 开辟了了一个长度为3的数组
另外一种开辟模式:分步进行数组实例化
int[] x = null ;
x = new int[3] ;
数组属于引用数据类型,因此在使用之前一定要开辟空间(实例化)
同一块堆内存空间可以被不同的栈内存所指向。
②数组静态初始化:
数据类型[] 数组名称 = {值,值,…}
int[] x = {1,2,8,5,3,3} ;
数据类型[] 数组名称 = new 数据类型[] {值,值,…}
数组的缺陷在于:存在越界问题
- 二维数组
二维数组的每一个元素就是一个一维数组,是一个存放一维数组的容器,实际上二维数组中存储的就是一维数组在堆内存中一维数组待得内存地址。
对于二维数组的定义有两种声明格式:
动态初始化: 数据类型[][] 对象数组 = new 数据类型[行个数][列个数]];
静态初始化: 数据类型[][] 对象数组 = new 数据类型[][]{{值,值,…},{值,值,…},…} ;
int[][] data = new int[][] {
{1,2,3},{4,5},{6,7,8,9}
};
在进行输出的时候一定要使用双重循环
- 数组拷贝
是将一个数组的部分内容替换掉另一个数组的部分内容(必须是连续的)
java.util.Arrays.copyOf(源数组名称,新数组长度)
System.arraycopy()
System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
System.arraycopy(dataB,4,dataA,1,3) ;
目标数组A: 1、2、3、4、5、6、7、8、9
源数组B: 11、22、33、44、55、66、77、88、99
替换后:1、55、66、77、5、6、7、8、9
//代码示例
public class ArrayDemo{
public static void main(String[] args) {
int[] dataA = new int[]{1,2,3,4,5,6,7,8,9} ;
int[] dataB = new int[]{11,22,33,44,55,66,77,88,99} ;
System.arraycopy(dataB,4,dataA,1,3) ;
printArray(dataA) ;
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
System.out.println() ;
}
}
四种拷贝方式:
Arrays.copyof()——>拷贝最快
for循环 对于基本数据类型是深拷贝
clone array2=array.clone 对于基本数据类型是深拷贝
System.arraycopy() 对于基本数据类型是深拷贝
四种对于引用类型来说都是浅拷贝
ii、数组排序
只要是基本数据类型的数组,sort方法都可以进行排序处理(升序处理)。
java.util.Arrays.sort(数组名称)
4. 对象数组
对象数组动态初始化:
class Person {
public int age;
}
//主类
public class Test {
public static void main(String[] args) {
//对象数组动态初始化
Person[] pers = new Person[3];
//实例化
pers[0] = new Person("张三",18);
pers[1] = new Person("李四",5);
pers[2] = new Person("赵六",26);
}
}
静态初始化
//定义Person类
class Person {
public int age;
}
//主类
public class Test {
public static void main(String[] args) {
对象数组静态初始化
Person[] pers = new Person[]{
new Person("张三",18),
new Person("李四",5),
new Person("赵六",26)
};
}
}