五.数组的应用
1.参数传数组类型(引用数据类型)
在方法内部修改数组的内容,方法外部的数组内容也发生改变。
因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。
public static void main(String[] args) {
int[] array = {1,2,3};
func(array);
System.out.println("array[0]="+array[0]);
}
public static void func(int[] x) {
x[0] = 10;
System.out.println("x[0]="+x[0]);
}
总结:所谓的‘引用’本质只是存了一个地址,Java将数组设定为引用类型,后续进行数组参数传参,本质就是将数组的地址传给形参,避免了对整个数组的拷贝。
2.数组拷贝
(1)循环拷贝
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
int[] copy = new int[array.length];
for (int i = 0;i < array.length;i++) {
copy[i] = array[i];
}
System.out.println("copy="+Arrays.toString(copy));
System.out.println("array="+Arrays.toString(array));
(2)copyOf拷贝
//copyOf的使用格式
int[] 新数组对象 = Arrays.copyOf(原数组名,数组长度);
//示例
int[] array = {1,2,3,4,5};
int[] copy = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(copy));
copyOf是util包的工具方法,更简单的拷贝一个数组。本质是建立一个新数组,并把原数组拷贝到新数组里面,在修改新数组的内容时,原数组不会被修改,因为新数组和原数组引用的不是同一个数组。也可用于数组扩容。
(3)copyOfRange拷贝
在上面的copyOf方法中,拷贝的数组长度不能够自定义。而copyOfRange可以选取原数组的某一段长度。
//copyOfRange的使用格式
int[] 新数组对象 = Arrays.copyOfRange(原数组名,数组下标,数组下标);
//示例
int[] array = {1,2,3,4,5};
int[] copy = Arrays.copyOfRange(array,1,3);
System.out.println(Arrays.toString(copy));
(4)注意
int[] arr = {1,2,3,4,5,6};
int[] newArr = arr;
newArr[] = 10;
System.out.println("newArr" + Arrays.toString(newArr));
这种不是拷贝!!!因为数组是引用类型,这相当于定义一个新数组,把原数组的地址给新数组,两个数组指向同一个地址,当新数组修改数组内容时,原数组也一起被修改了。
3.求数组平均值
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
System.out.println(func1(array));
}
public static double func1(int[] n) {
int sum = 0;
for (int i = 0; i <= n.length - 1; i++) {
sum += n[i];
}
double a = (double) sum / (double) n.length;
return a;
}
4.查找数组指定元素
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
System.out.println(func2(arr,5));
}
public static int func2(int[] array,int data) {
for (int i = 0; i < array.length; i++) {
if (array[i] == data) {
return array[i];
}
}
return 0;
}
六.二维数组
二维数组是特殊的一维数组。本质是一维数组存放的元素是一组一维数组的地址。
1.数组的创建和初始化
int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] array3 = new int[2][3];
array3 = new int[][]{{1,2,3},{4,5,6}};
定义二维数组时,不能省略 行!
int[][] array4 = new int[2][]; //不规则数组
2.打印二维数组
//循环打印
int[][] array = {{1,2,3,4},{5,6,7,8}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
//deepToString打印
int[][] array1 = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(array1));