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     }

 

posted @ 2022-07-13 17:29  嗒嗒媛  阅读(68)  评论(0编辑  收藏  举报