目录
1.认识 null
编辑 2.数组的应用
3.数组作为函数的参数
4.数组作为函数的返回值
5.数组练习
数组转字符串
6.数组拷贝
(1)通过函数Arrays.copyOf()进行拷贝:
(2)通过函数System.arraycopy()进行拷贝:
(3)拷贝范围Arrays.copyOfRange()
(4)比较两个数组是否相等Arrays.equals()
(5)对数组进行填充Arrays.fill()
7.深浅拷贝
8.在数组中查找一个元素
1.认识 null
null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用。
2.数组的应用
3.数组作为函数的参数
参数传类型(引用数据类型)
总结:当数组作为参数进行传递的时候,其实还是按值传递的,只不过传递的值是一个地址。那么会出现两种情况:
1.形参改变指向:array = new int[10];只会影响形参的指向。
2.形参修改指向对象的值:array[0] = 9;此时才会影响实参。
4.数组作为函数的返回值
5.数组练习
数组转字符串
public static String myToString(int[] array) {if (array == null) {return "null";}String ret = "[";for (int i = 0; i < array.length; i++) {ret += array[i];if (i != array.length - 1) {ret += ", ";}}ret = ret + "]";return ret;}public static void main(String[] args) {int[] array = {1,2,3,4};System.out.println(myToString(array));}
6.数组拷贝
//数组拷贝public static void main(String[] args) {int[] array = {1,2,3,4};int[] array2 = new int[array.length];for (int i = 0; i < array.length; i++) {array2[i] = array[i];}System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(array2));}
(1)通过函数Arrays.copyOf()进行拷贝:
public static void main(String[] args) {int[] array = {1,2,3,4};//可以当作扩容int[] ret = Arrays.copyOf(array, array.length);System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(ret));int[] ret2 = Arrays.copyOf(array, array.length*2);System.out.println("--------------------");System.out.println(Arrays.toString(ret2));}
(2)通过函数System.arraycopy()进行拷贝:
public static void main(String[] args) {int[] array = {1,2,3,4};int[] copy = new int[array.length];System.arraycopy(array, 0, copy, 0, array.length);System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(copy));int[] copy2 = new int[array.length];System.arraycopy(array, 1, copy2, 1, array.length-1);//从array数组下标为1的元素开始拷,只能拷3个,所以长度-1System.out.println(Arrays.toString(copy2));}
import java.util.Arrays;public static void func(){
// newArr和arr引用的是同一个数组
// 因此newArr修改空间中内容之后,arr也可以看到修改的结果int[] arr = {1,2,3,4,5,6};int[] newArr = arr;newArr[0] = 10;System.out.println("newArr: " + Arrays.toString(arr));
// 使用Arrays中copyOf方法完成数组的拷贝:
// copyOf方法在进行数组拷贝时,创建了一个新的数组
// arr和newArr引用的不是同一个数组arr[0] = 1;newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr));
// 因为arr修改其引用数组中内容时,对newArr没有任何影响arr[0] = 10;System.out.println("arr: " + Arrays.toString(arr));System.out.println("newArr: " + Arrays.toString(newArr));
// 拷贝某个范围.int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);System.out.println("newArr2: " + Arrays.toString(newArr2));}
(3)拷贝范围Arrays.copyOfRange()
public static void main(String[] args) {int[] array = {1,2,3,4,5};int[] ret = Arrays.copyOfRange(array, 1, 3);//[1,3)System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(ret));}
(4)比较两个数组是否相等Arrays.equals()
public static void main(String[] args) {int[] array1 = {1,2,3,4,5};int[] array2 = {1,2,3,4,5};System.out.println(Arrays.equals(array1,array2));}
(5)对数组进行填充Arrays.fill()
public static void main(String[] args) {int[] array = new int[10];Arrays.fill(array, 3);System.out.println(Arrays.toString(array));}
局部赋值:
public static void main(String[] args) {int[] array = new int[10];Arrays.fill(array, 3);System.out.println(Arrays.toString(array));//局部赋值——将4~7的位置赋值为9Arrays.fill(array, 3, 7, 9);//[3,7)System.out.println(Arrays.toString(array));}
(6)数组名.clone()——>产生一个副本
public static void main(String[] args) {int[] array1 = {1,2,3,4,5};int[] array2 = array1.clone();System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));System.out.println("-----------------------");array2[0] = 100;System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}
7.深浅拷贝
8.在数组中查找一个元素
public static int find(int[] array, int val) {for (int i = 0; i < array.length; i++) {if (array[i] == val) {return i;}}return -1;}public static void main(String[] args) {int[] array = {1,2,3,4,5};int ret = find(array, 2);//这个方法效率极低System.out.println(ret);//1(下标为1)}