数组
一维数组
- 初始化
分为静态初始化和动态初始化
package com.atguigu.contact;
public class ArrayTest {
public static void main(String[] args) {
int[] ids; //声明
ids = new int[]{1001,1002,1003,1004};//静态初始化。初始化和赋值同时进行
String[] names = new String[5];//动态初始化,初始化和赋值分开进行
//对数组赋值
names[0] = "小明";
names[1] = "小红";
names[2] = "小军";
names[3] = "小方";
//获取数组长度
System.out.println(ids.length);
//遍历数组元素
for(int i = 0;i < names.length;i++)
System.out.println(names[i]);
}
}
总结:数组一旦初始化完成,其长度确定
-
数组元素的默认初始化值
整形:0
浮点型:0.0
char型:0或'\u0000'而非‘0’
boolean:false
引用数据类型(如String):null -
数组的内存解析
image.png
二维数组
- 初始化
package com.atguigu.contact;
public class ArrayTest1 {
public static void main(String[] args) {
//静态初始化
int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8}};
//动态初始化1
int[][] arr1 = new int[3][2];
//动态初始化2
int[][] arr2 = new int[3][];
//错误的情况
// String [][] arr3 = new String[][3];
// String [4][3] arr4 = new String[][];
// int [][] arr5 = new int[4][3] {{1,,2,3},{4,5},{6,7,8}};
}
}
-
数组元素的默认初始化值
针对初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对初始化方式二:比如int[][] arr = new int[4][]
外层元素的初始化值为:null
内层元素的初始化值为;不能调用,否则报错 -
二维数组内存解析
image.png
深复制与浅复制
- 浅复制:只是把数组的地址复制了
- 深复制:真正的复制
package com.atguigu.contact;
public class ArrayTest2 {
public static void main(String[] args) {
int[] array1,array2,array3;
array1 = new int[]{1,2,3,4,5};
// 浅复制
array2 = array1;
array1[0] = 10;
for(int i = 0;i<array1.length;i++)
{
System.out.print(array1[i]);//10 2 3 4 5
System.out.print(array2[i]);//10 2 3 4 5
}
array3 = new int[array1.length];
// 深复制
for(int i = 0;i<array1.length;i++)
{
array3[i] = array1[i];
System.out.println(array3[i]);
}
}
}
Arrays工具类的使用
-
boolean equals(int[] a,int[] b) //判断两数组是否相等
String toString(int[] a) //输出数组信息
void fill(int[] a,int val) //将指定值填充到数组之中
void sort(int[] a) //对数组进行排序
int binarySearch(int[] a,int key) //对排序后的数组进行二分法检索指定的值
package com.atguigu.contact;
import java.util.Arrays;
public class ArrayTest3 {
public static void main(String[] args) {
//boolean equals(int[] a,int[] b)判断两数组是否相等
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEqual = Arrays.equals(arr1, arr2);
System.out.println(isEqual);//false
//String toString(int[] a)输出数组信息
System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
//void fill(int[] a,int val)将指定值填充到数组之中
Arrays.fill(arr1, 5);
System.out.println(Arrays.toString(arr1));//[5, 5, 5, 5]
//void sort(int[] a)对数组进行排序
int[] arr3 = new int[] {5,3,6,7,8,1,10};
Arrays.sort(arr3);
System.out.println(Arrays.toString(arr3));//[1, 3, 5, 6, 7, 8, 10]
//int binarySearch(int[] a,int key)对排序后的数组进行二分法检索指定的值
System.out.println(Arrays.binarySearch(arr3, 3));
}
}
数组常见异常
1.数组角标越界异常:ArrayIndexOutOfBoundsException
2.空指针异常:NullPointerException
image.png
网友评论