Day8.1 关于数组

Day8.1

多维数组

  1. 多维数组可以看成是数组的数组,二维数组就是一个特殊的数组,每一个元素都是一个一维数组。

     int a[][] = new int[2][5];
  2. 可以理解成一个文件夹里面又放置了一个文件夹

 

Arrays类

  1. 工具类java.util.Arrays;

  2.  public class Demo06 {
         public static void main(String[] args) {
             int[] array = {1,2,3,6,4,2};
             //输出数组的哈希值
             System.out.println(array);
             //输出整个数组
             System.out.println(Arrays.toString(array));
      //调用print方法,与上一句作用相同
             print(array);
      //进行排序
             Arrays.sort(array);
        }
     
         public static void print(int[] abc){
             for(int i = 0; i < abc.length; i++){
                 if(i == 0){
                     System.out.print("[");
                }
                 if(i == abc.length - 1){
                     System.out.print("]");
                }else{
                     System.out.print(abc[i]+" ");
                }
            }
        }
     }

 

冒泡排序

  1. 比较数组中两个相邻的元素,如果第一个数大于第二个,就交换位置。

  2. 每一次比较都会产生出一个最大或最小的数字。

  3. 下一轮就会少一次排序。

  4. 一次循环直至结束。

  5. sort()方法

     import java.util.Arrays;
     
     /**3,2,2,1,4,5,1
      * @author FunnyTime
      */
     public class Demo07 {
         public static void main(String[] args) {
             int[] nums = {1, 3, 2, 5, 1, 3, 3};
             int[] sort = sort(nums);
             System.out.println(Arrays.toString(sort));
        }
     
         public static int[] sort(int[] array) {
             //定义一个临时变量
             int temp = 0;
             for (int i = 0; i < array.length - 1; i++) {
                 //通过标识位减少没有意义的排序
                 boolean flag = false;
                 //内层循环,判断两个数,如果第一个数大于第二个则交换位置,一次循环后最右边的一定是最小值(当改成array[j + 1] < array[j],最右边一定是最大值)
                 for (int j = 0; j < array.length - 1 - i; j++) {
                     if (array[j + 1] > array[j]) {
                         temp = array[j];
                         array[j] = array[j + 1];
                         array[j + 1] = temp;
                         flag = true;
                    }
                }
                 if(flag == false){
                     break;
                }
            }
             return array;
        }
     }

 

稀疏数组

  1. 当一个数组中大部分元素都是0,或者都是同一个值,可以使用稀疏数组保存该数组。

  2. 处理方式:记录数组一共有几行几列,有多少不同值;把具有不同值的元素和行列及值记录在一个小规模数组中,从而缩小程序的规模。

  3. 示例

    示例

  4. 稀疏数组示例,这个代码我现在暂时还无法理解

     package array;
     
     /**
      * @author FunnyTime
      */
     public class Demo08 {
         public static void main(String[] args) {
             //创建一个二维数组11*11 0:没有棋子 1:黑棋 2:白棋
             int[][] array1 = new int[11][11];
             array1[1][2] = 1;
             array1[2][3] = 1;
             //输出原始数组
             System.out.println("输出原始数组");
     
             for(int[] ints : array1){
                 for(int anInt :ints){
                     System.out.print(anInt+"\t");
                }
                 System.out.println();
            }
             System.out.println("===========");
             //转换为稀疏数组保存
             //获取有效值的个数
             int sum = 0;
             for(int i = 0; i < array1.length; i++){
                 for(int j = 0; j < array1.length; j++){
                     if(array1[i][j] != 0){
                         sum++;
                    }
                }
            }
             System.out.println("有效值个数为:"+sum);
     
             //创建一个稀疏数组的数组
             int[][] array2 = new int[sum + 1][3];
     
             array2[0][0] = 11;
             array2[0][1] = 11;
             array2[0][2] = sum;
     
             //遍历二维数组,将非零的值,存放在稀疏数组
             int count = 0;
             for(int i = 0; i < array1.length; i++){
                 for(int j = 0; j < array1[i].length; j++){
                     if(array1[i][j] != 0){
                         count++;
                         array2[count][0] = i;
                         array2[count][1] = j;
                         array2[count][2] = array1[i][j];
     
                    }
                }
            }
     
             //输出稀疏数组
             System.out.println("稀疏数组");
     
             for(int i = 0; i < array2.length; i++){
                 System.out.println(array2[i][0]+"\t"+array2[i][1]+
                         "\t"+array2[i][2]+"\t");
            }
     
             System.out.println("===================");
     
             //还原稀疏数组
             //1.读取稀疏数组
             int[][] array3 = new int[array2[0][0]][array2[0][1]];
     
             //2.给其中的元素还原它的值
             for(int i = 1; i < array2.length; i++){
                 array3[array2[i][0]][array2[i][1]] = array2[i][2];
            }
     
             //3.打印
             System.out.println("输出还原的数组");
     
             for(int[] ints : array1){
                 for(int anInt : ints){
                     System.out.print(anInt+"\t");
                }
                 System.out.println();
     
            }
     
        }
     }
     

     

  5.  

posted @ 2021-04-19 16:06  蜂皇浆兵  阅读(139)  评论(0)    收藏  举报