1.数组初始化
1.1动态初始化(声明并开辟数组)
数据类型【】 数组名称 = new 数据类型 【长度】
eg:声明并开辟一个长度为5的数组 int[ ] data = new int[5];
a.数组通过下标索引来取得元素,下标默认从0开始。数组下标超出数组长度,数组越界异常(运行时异常)
b.数组中每个元素都有默认值,默认值是该数据类型默认值
c.数组名称.length:取得数组长度
d.数组遍历推荐使用for-each循环(仅限于数组内容读取),要修改数组内容,还是使用常规for循环 for(int num:data){...}
数组属于引用数据类型,必须在使用前先初始化,否则会NullPointerException(空指针异常),也属于运行时异常。
引用传递:多个栈内存指向同一块堆内存
eg:
public class test{
public static void main(String[] args){
int[] arr = new int[3];
System.out.println(arr.length);
arr[0] = 1;
arr[1] = 2;
for(int i=0; i<arr.length; i++)
{
System.out.print(arr[i]+" ");
}
/*
for(int num:arr)
{
System.out.print(num+" ");
}
*/
}
}
1.2数组静态初始化
简化格式: 数据类型【】 数组名称 = {值,值...}
int[] arr = {10,20,30,40};
System.out.println(arr.length);
完整格式(推荐): 数据类型【】 数组名称 = new 数据类型{值,值...}
int[] arr = new int[] {10,20,30,40};
System.out.println(arr.length);
1.3二维数组
动态初始化: 数据类型【】【】 数组名称 = new 数据类型【行个数】【列个数】
eg:开辟行数为3列数为4的整型数组 int 【】【】 arr = new int 【3】【4】;
public static void main(String[] args){
int[][] arr = new int[3][4];
arr[0][0] = 3;
for(int i=0; i<arr.length; i++)
{
for(int j=0; j<arr[i].length; j++)
{
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
静态初始化: 数据类型【】【】 数组名称 = new 数据类型【】【】{{第一行的值},{第二行的值} ... }
int[][] arr = new int[][] {{1},{2,3},{4,5,6}};
2.数组与方法的互操作-引用传递
2.1.方法接收数组
public class test{
public static void main(String[] args){
int[] data = new int[]{2,4,6,8,9};
printArray(data);
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
}
2.2.方法返回数组
public class test{
public static void main(String[] args){
int[] data = init();
printArray(data);
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
public static int[] init(){
return new int[]{2,4,6,8,9};
}
}
2.3.方法修改数组
public class test{
public static void main(String[] args){
int[] data = init(); //对数组进行初始化
modify(data); //将数组中的每个数扩大二倍
printArray(data); //打印数组中的每个数
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
public static int[] init(){
return new int[]{2,4,6,8,9};
}
public static void modify(int[] data){
for(int i=0; i<data.length; i++){
data[i] *= 2;
}
}
}
3.Java对数组的支持(可以直接调用)
1.1.排序-java.util.Arrays.sort(数组名称)
支持所有基本数据类型
内部使用双轴快速排序
public class test{
public static void main(String[] args){
int[] data = new int[]{55,2,1,3,77,45,99,7,70};
char[] c = new char[]{'a','b','d','c'};
java.util.Arrays.sort(data);
java.util.Arrays.sort(c);
printArray(data);
printArray(c);
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
public static void printArray(char[] data){
for(char temp : data){
System.out.print(temp+" ");
}
}
}
2.数组的部分拷贝
System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
public class test{
public static void main(String[] args){
int[] data1 = new int[]{1,2,3,4,5,6,7,8,9};
int[] data2 = new int[]{11,22,33,44,55,66,77,88,99};
System.arraycopy(data2,4,data1,1,3);
printArray(data1);
//1,55,66,77,5,6,7,8,9 和哪个数组长的更像,那么这个数组为目标数组,另一个为源数组
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
}
3.数组全拷贝(重点)
java.util.Arrays.copyOf(源数组名称,新数组长度)
返回一个新的整型数组
public class test{
public static void main(String[] args){
int[] data1 = new int[]{1,2,3,4,5,6,7,8,9};
int[] temp = java.util.Arrays.copyOf(data1,data1.length+1);
//只能从最开始拷贝
printArray(temp);
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+" ");
}
}
}