数组是一组数据的集合,在定义数组时必须指定其大小,数组的随机访问是个常量时间,每一个数组都内置了一个成员变量 length,表示数组的总长度;数组增加元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间线性时;数组删除元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间线性时间,数组的元素查找花费时间也为线性时间。
数组的初始化:
1. int[] arr1 = {1,2,3,4,5};
2. int[] arr2 = new int[]{1,2,3,4,5};
数组的输出与扩容缩容:
import java.util.Arrays; import java.util.Random; public class ArrayTestUnit { public static void main(String[] args) { //定义数组 int[] arr = new int[100]; //产生100~200之间的随机数放入数组 Random rd = new Random(); for (int i = 0; i < 100; i++) { arr[i] = rd.nextInt(101) + 100; } // 输出数组方式一 标准for循环 for (int i = 0; i < arr.length; i++) { if (arr[i] % 2 == 0) { System.out.print(arr[i] + " "); } } System.out.println(); // 输出数组方式二 foreach arr.length for (int val : arr) { if (val % 2 == 0) { System.out.print(val + " "); } } System.out.println(); /** * int[] arr = new int[100]; arr[100] - arr[199] * 向上面的arr数组再放100个元素(放【0,50】之间的随机整数), * 然后把数组进行打印输出 */ // 先扩容 // 1 先开辟新数组 // int[] newArr = new int[2*arr.length]; // 2 把旧数组的值都拷贝到新数组当中 // for (int i = 0; i < arr.length; i++) { // newArr[i] = arr[i]; // } // 3 让arr指向新数组 // arr = newArr; // Arrays.copyOf 可以做数组的扩容和缩容 arr = Arrays.copyOf(arr, arr.length * 2); // 然后再给新的数组继续添加数据 for (int i = 100; i < arr.length; i++) { arr[i] = rd.nextInt(51); } // 输出数组 /*for(int val : arr){ System.out.print(val + " "); } System.out.println();*/ // Arrays.toString输出数组元素的内容 System.out.println(Arrays.toString(arr)); // 操作完成,把数组的每一个元素的值重置为0 /*for (int i = 0; i < arr.length; i++) { arr[i] = 0; }*/ Arrays.fill(arr, 0); //与上面代码效果相同 // 往数组添加50个整数1-50,每次添加新元素都从数组的0号位置进行添加 int count = 0; for (int i = 0; i < 50; i++) { // 先把数组中所有的元素都往后挪动一下 for (int j = count; j > 0; j--) { arr[j] = arr[j - 1]; } // 再把数据放到0号位 arr[0] = i + 1; // 更新元素个数 count++; // arr.length } for (int i = 0; i < count; i++) { System.out.print(arr[i] + " "); } System.out.println(); // 把第21号位元素从arr里面删除,重新输出arr数组的元素值 for (int i = 21; i < count - 1; ++i) { arr[i] = arr[i + 1]; } count--; for (int i = 0; i < count; i++) { System.out.print(arr[i] + " "); } System.out.println(); // 在数组中查找46,是一个线性时间 for (int i = 0; i < count; ++i) { if (arr[i] == 46) { System.out.println("find 46!!!"); break; } } // 把arr缩容到有效元素的个数 arr = Arrays.copyOf(arr, count); } }
补充:
数组的辅助类Arrays
* Arrays.copyOf 数组的扩容和缩容
* Arrays.toString 打印数组元素
* Arrays.deepToString 打印二维数组元素的值
* Arrays.fill 给数组填充初始化值
* Arrays.equals 比较两个数组的内容是否相同
二维数组:
二维数组的初始化:
int[][] arr = new int[4][];
arr[0] = new int[]{12};
arr[1] = new int[]{8,9};
arr[2] = new int[]{11,7,16};
arr[3] = new int[]{13,9,8,7};
下面的代码与上面的效果相同:int[][] arr = {{12},{8,9},{11,7,16},{13,9,8,7}};