Java入门之数组扩展
1、冒泡排序
2层循环,外层冒泡轮数,里层依次比较
1 public static void main(String[] args) { 2 int[] arrays = {1,3,98,48,67,35,2,78,2,66}; //原始数组 3 int temp = 0; //定义第三方容器 4 for (int i = 0; i < arrays.length - 1; i++) { //冒泡轮数,两两比较,所以要-1 5 for (int j = 0; j < arrays.length - 1 - i; j++) { //每冒泡一轮,比较的数减少1个,所以要-i 6 if(arrays[j + 1] > arrays[j]){ //从小到大 "<" 从大到小 ">" 7 temp = arrays[j]; 8 arrays[j] = arrays[j + 1]; 9 arrays[j + 1] = temp; 10 } 11 } 12 } 13 for (int arr : arrays) { 14 System.out.print(arr + "\t"); 15 } 16 }
2、稀疏数组
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组;
处理方式为:
- 记录数组一共几行几列,有多少个不同的值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
1 public static void main(String[] args) { 2 //创建一个11*11的黑白棋格 0-没有棋子,1-黑棋,2-白棋 3 int[][] array1 = new int[11][11]; 4 array1[1][2] = 1; 5 array1[2][3] = 2; 6 System.out.println("oldArray:"); 7 for(int[] a : array1){ 8 for (int b : a){ 9 System.out.print(b + "\t"); 10 } 11 System.out.println(); 12 } 13 System.out.println("========================================="); 14 //转换为稀疏数组 15 //1.记录有效值个数 16 int sum = 0; 17 for (int i = 0; i < array1.length; i++) { 18 for (int j = 0; j < array1[i].length; j++) { 19 if(array1[i][j] != 0){ 20 sum++; 21 } 22 } 23 } 24 System.out.println("sum:" + sum); 25 System.out.println("========================================="); 26 //2.创建一个稀疏数组 27 int[][] array2 = new int[sum + 1][3]; //固定3列 28 array2[0][0] = 11; 29 array2[0][1] = 11; 30 array2[0][2] = sum; 31 //3.遍历二维数组,将非零的值存放到稀疏数组中 32 int count = 0; 33 for (int i = 0; i < array1.length; i++) { 34 for (int j = 0; j < array1[i].length; j++) { 35 if(array1[i][j] != 0){ 36 count++; 37 array2[count][0] = i; 38 array2[count][1] = j; 39 array2[count][2] = array1[i][j]; 40 } 41 } 42 } 43 //输出稀疏数组 44 System.out.println("newArray:"); 45 for (int i = 0; i < array2.length; i++) { 46 System.out.println(array2[i][0] + "\t" 47 +array2[i][1] + "\t" 48 +array2[i][2] + "\t"); 49 } 50 51 System.out.println("======================================="); 52 //将稀疏数组还原为原始数组 53 int[][] array3 = new int[array2[0][0]][array2[0][1]]; 54 for (int i = 1; i < array2.length; i++) { 55 array3[array2[i][0]][array2[i][1]] = array2[i][2]; 56 } 57 System.out.println("newArray to oldArray:"); 58 for(int[] a : array3){ 59 for (int b : a){ 60 System.out.print(b + "\t"); 61 } 62 System.out.println(); 63 } 64 }
3、Arrays工具类
Arrays是数组的工具类,在java.util包中,其方法都是静态的,可直接调用使用。
常用的方法:
sort,对数组进行排序,升序。
fill,给数组赋值。
equals,比较数组中的元素是否相等。
等等,可参见JDK文档。
1 public static void main(String[] args) { 2 int[] arr = {9,3,6,2,5}; 3 Arrays.sort(arr); //升序排序 4 System.out.println(Arrays.toString(arr)); //转为字符串打印 5 System.out.println("========================="); 6 Arrays.fill(arr,0,2, 0); //给下标为0-2的赋值0 7 System.out.println(Arrays.toString(arr)); 8 9 System.out.println("=========================="); 10 int[] copy = Arrays.copyOf(arr, 3); //复制长度为3的数组 11 System.out.println(Arrays.toString(copy)); 12 }