1、数组基础
1.1、数组概述
- 数组:存放多个同一类型的数据,是引用数据类型。
- 范例
public class hello{
public static void main(String[] args){
double[] n1 = {1,2.3,3,4,5};
System.out.println(n1);
for(int i=0;i<n1.length;i++){
System.out.println(n1[i]);
}
}
}
1.2、数组特点
(1)引用数据类型; (2)数组中的多个数据,类型必须统一; (3)数组长度在程序运行期间不可改变。
2、数组初始化
2.1、动态初始化
数据类型[] 数组名 = new 数据类型[大小]
public class hello{
public static void main(String[] args){
double[] n1 = new double[3];
n1[0] = 1;
n1[1] = 12;
n1[2] = 13;
System.out.println(n1);
for(int i=0;i<n1.length;i++){
System.out.println(n1[i]);
}
}
}
2.2、静态初始化
数据类型[] 数组名 = {元素值1,元素值2,......,元素值3}
public class hello{
public static void main(String[] args){
double[] n1 = {1,2,3};
System.out.println(n1);
for(int i=0;i<n1.length;i++){
System.out.println(n1[i]);
}
}
}
2.3、注意事项
(1)静态初始化没有指定长度,但可以自动推断出长度; (2)静态和动态初始化可拆分为两个步骤;
int[] array4;
array4 = new int[10];
double[] array6;
array6 = new double[]{1,2,1.1};
(3)省略静态初始化不可拆分两个步骤。
2.4、数组动态初始化的默认值
- 数组初始值:动态初始化数组中的元素自动拥有一个默认值
(1)整数类型,默认为0; (2)浮点类型,默认为0.0; (3)字符类型,默认为’\u0000‘; (4)布尔类型,默认为false; (5)引用类型,默认为null。
3、数组的赋值机制
3.1、基本类型&数组赋值机制
public class hello{
public static void main(String[] args){
int n1 = 1;
int n2 = 2;
n2 = 3;
System.out.println(n1);
System.out.println(n2);
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 99;
System.out.println("----打印arr1的值----");
for( int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
System.out.println("----打印arr2的值----");
for( int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
}
}
(2)基本类型&数组赋值存储空间解析
- 数组类型赋值存储空间解析:两个数据指向同一个地址,即指向同一块内存区域,当这个内存区域中的数据变化,则两个数组输出都会变化。
3.2、数组内存概述
(1)单个一维数组内存图
(2)两个一维数组内存图
(3)两个引用指向同一个一维数组的内存,不会开辟新的堆内存
(4)一个二维数组内存布局
3.3、常见问题
- 数组索引越界异常:数组索引超过[0,n-1];
- 空指针异常:数组没有new初始化则会发生空指针异常;
4、数组应用
4.1、数组拷贝
public class hello{
public static void main(String[] args){
int[] arr1 = {1,2,3};
int[] arr2 = new int[arr1.length];
for(int i=0;i<arr1.length;i++){
arr2[i] = arr1[i];
}
for (int i=0;i<arr1.length;i++){
System.out.println("one"+arr1[i]);
}
for (int i=0;i<arr2.length;i++){
System.out.println("two"+arr1[i]);
}
}
}
- 内存解析
4.2、数组扩容
- 业务场景:数据{1,2,3}增加元素4,直接放到数组最后
- 编写代码
public class hello{
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
System.out.println(arr1);
int[] arr2 = new int[arr1.length + 1];
System.out.println(arr2);
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
arr2[arr2.length - 1] = 4;
arr1 = arr2;
System.out.println(arr1);
System.out.println(arr2);
}
}
|