7.数组

数组

1. 数组的声明与创建

tip: 获取数组的长度: array.length

package com.lin.study.array;

public class ArrayDemo01 {
   public static void main(String[] args) {
       int[] nums;//1.声明一个数组
       nums = new int[3];//2.创建一个数组

       //int[] nums = new int[3]; //声明 + 创建

       //3.给数组元素中赋值
       nums[0] = 1;
       nums[1] = 2;
       nums[2] = 3;

       //4.计算所有元素的和
       int sum = 0;

       for (int i = 0; i < nums.length; i++) {
           sum = sum + nums[i];
      }

       System.out.println("总和为: " + sum);
  }
}

运行结果:

总和为: 6

Process finished with exit code 0

2.数组的初始化

package com.lin.study.array;

public class ArrayDemo02 {
   public static void main(String[] args) {
       //1.静态初始化: 创建 + 赋值
       int[] a = {1,2,3,4,5};

       //2.动态初始化: 包含默认的初始化
       int[] b = new int[10];
       b[0] = 1;
       b[1] = 2;//可以进行动态的赋值

       System.out.println(b[0]);//1
       System.out.println(b[1]);//2
       System.out.println(b[2]);//0---->没有赋值的下标,会输出类型的默认值
  }
}

运行结果:

1 2 0

Process finished with exit code 0

3. 数组的应用

3.1基本应用

package com.lin.study.array;

public class ArrayDemo03 {
   public static void main(String[] args) {
       int[] array = {1,2,3,4,5};

       //1.打印全部的数组元素
       for (int i = 0; i < array.length; i++) {
           System.out.print(array[i] + "\t");
      }

       System.out.println();
       System.out.println("。。。。。。。。。");//分割线

       //2.计算所有元素的和
       int sum = 0;
       for (int i = 0; i < array.length; i++) {
           sum += array[i];
      }
       System.out.println("sum= " + sum);

       //3.查找最大元素
       int max = array[0];
       for (int i = 1; i < array.length; i++) {
           if(array[i] > max){
               max = array[i];
          }
      }
       System.out.println("max= " + max);
  }
}

运行结果:

1 2 3 4 5 。。。。。。。。。 sum= 15 max= 5

Process finished with exit code 0

3.2 数组用于foreach,作方法入参,作返回值

package com.lin.study.array;

public class ArrayDemo04 {
   public static void main(String[] args) {
       int[] arrays = {1,2,3,4,5};

       //1.foreach循环: JDK1.5后,没有下标的增强for循环,用于遍历数组。
       for (int array : arrays) {     //arrays.for + 回车 : 快捷生成foreach语句
           System.out.print(array + "\t");
      }

       System.out.println();
       System.out.println("。。。。。。。。。");

       //2.数组作为方法入参
       printArray(arrays);  //调用printArray方法

       System.out.println();
       System.out.println("。。。。。。。。。。。");

       //3.数组作为返回值
       int[] r = reserve(arrays);//调用reserve方法,用数组r进行接收。
       printArray(r);//调用printArray方法,打印出数组r
  }


   //2.定义打印数组元素的方法(数组作为方法入参)
   public static void printArray(int[] arrays){
       for (int i = 0; i < arrays.length; i++) {
           System.out.print(arrays[i] + "\t");
      }
  }

   //3.定义反转数组的方法(数组座位返回值)
   public static int[] reserve(int[] arr){
       //定义数组reault,用于存放新数组。
       int[] result = new int[arr.length];
       //反转的操作
       for (int i = 0,j = result.length-1; i < arr.length; i++,j--) {
           result[j] = arr[i];
      }

       return result;
  }

}

运行结果:

1 2 3 4 5 。。。。。。。。。 1 2 3 4 5 。。。。。。。。。。。 5 4 3 2 1 Process finished with exit code 0

4.二维数组

package com.lin.study.array;

public class ArrayDemo05 {
   public static void main(String[] args) {
       //[4][2]
       /* 1,2     array[0] : array[0][0],array[0][1]
           2,3     array[1] : array[1][0],array[1][1]
           3,4     array[2] : array[2][0],array[2][1]
           4,5     array[3] : array[3][0],array[3][1]
        */

       int[][] array = {{1,2},{2,3},{3,4},{4,5}};

       printArray(array[0]);//1,2

       System.out.println();
       System.out.println("..........");//分割线

       //1.打印数组元素
       System.out.println(array[0][0]);//1
       System.out.println(array[0][1]);//2
       
       System.out.println("..........");//分割线

       //2.获取数组长度
       System.out.println(array.length);//4 (表示外层数组的长度)
       System.out.println(array[0].length);//2 (表示内层数组array[0]的长度)

       System.out.println("..........");//分割线

       //3.利用for循环嵌套,打印全部数组元素
       for (int i = 0; i < array.length; i++) {
           for (int j = 0; j < array[i].length; j++) {
               System.out.print(array[i][j] + "\t");
          }
      }
  }
   //定义打印数组元素的方法(数组作为方法入参)
   public static void printArray(int[] array){
       for (int i = 0; i < array.length; i++) {
           System.out.print(array[i] + "\t");
      }
  }
}

运行结果:

1 2 .......... 1 2 .......... 4 2 .......... 1 2 2 3 3 4 4 5 Process finished with exit code 0

5.Arrays类

package com.lin.study.array;

import java.util.Arrays;

public class ArrayDemo06 {
   public static void main(String[] args) {
       int[] a = {1,32,95,68,66,77,72,59,88};

       //1.打印数组元素
       //1.1.普通的打印输出,不能打印出数组对象。
       System.out.println(a);//[I@1b6d3586
       //1.2.利用Arrays.toString方法,打印数组元素。
       System.out.println(Arrays.toString(a));//[1, 32, 95, 68, 66, 77, 72, 59, 88]
       //1.3.可以利用自己写的打印方法,打印数组元素
       printArray(a);//[1, 32, 95, 68, 66, 77, 72, 59, 88]

       System.out.println();
       System.out.println("。。。。。。");//分割线

       //2.sort方法(升序排序方法)
       Arrays.sort(a);//利用sort方法,对数组a进行排序
       System.out.println(Arrays.toString(a));//利用toString方法,打印出数组a

       //3.fill方法(填充覆盖方法,区间左闭右开[1,3))
       Arrays.fill(a, 1, 3, 0);
       System.out.println(Arrays.toString(a));//[1, 0, 0, 66, 68, 72, 77, 88, 95]

  }

   //自己写的打印方法
   public static void printArray(int[] a){
       for (int i = 0; i < a.length; i++) {
           if(i==0){
               System.out.print("[");
          }
           if(i==a.length-1){
               System.out.print(a[i] + "]");
          }else{
               System.out.print(a[i] + ", ");
          }
      }
  }
}

运行结果:

[I@1b6d3586 [1, 32, 95, 68, 66, 77, 72, 59, 88] [1, 32, 95, 68, 66, 77, 72, 59, 88] 。。。。。。 [1, 32, 59, 66, 68, 72, 77, 88, 95] [1, 0, 0, 66, 68, 72, 77, 88, 95]

Process finished with exit code 0

6.冒泡排序

package com.lin.study.array;

import java.util.Arrays;

public class ArrayDemo07 {
   public static void main(String[] args) {
       int[] a = {1,32,95,68,66,77,72,59,88};

       int[] s = sort01(a);//定义数组s,调用sort01
       System.out.println(Arrays.toString(s));//调用toString方法,打印数组a
  }

   //定义冒泡排序方法
   public static int[] sort01(int[] array){
       //定义临时变量
       int temp = 0;

       //外层循环,判断要走多少次
       for (int i = 0; i < array.length - 1; i++) {
           //内层循环
           for (int j = 0; j < array.length - 1; j++) {
               //判断条件
               if (array[j] > array[j+1]) {
                   temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
              }
          }
      }
       return array;
  }
}

运行结果:

[1, 32, 59, 66, 68, 72, 77, 88, 95]

Process finished with exit code 0

7.稀疏数组

package com.lin.study.array;

public class ArrayDemo08 {
   public static void main(String[] args) {
       //1.创建一个二维数组11*11       0:没有棋子     1:黑棋       2:白棋
       int[][] array1 = new int[11][11];
       array1[1][2] = 1;//使用1表示,放入一颗黑棋
       array1[2][3] = 2;//使用2表示,放入一颗白棋
       //2.输出原始的数组
       System.out.println("输出原始的数组: ");
       for (int[] ints : array1) {
           for (int anInt : ints) {
               System.out.print(anInt + "\t");
          }
           System.out.println();
      }

       //3.转化为稀疏数组保存
       //3.1获取有效值的个数
       int sum = 0;//用于存放有效值的个数
       for (int i = 0; i < 11; i++) {
           for (int j = 0; j < 11; j++) {
               if(array1[i][j]!=0){
                   sum++;
              }
          }
      }
       System.out.println("有效值的个数为: " + sum);

       //创建一个稀疏数组
       int[][] array2 = new int[sum+1][3];//sum+1表示有效值和表头,3表示3列,|行值|列值|有效值|

       //表头
       array2[0][0] = 11;
       array2[0][1] = 11;
       array2[0][2] = sum;

       //3.3.遍历二维数组array1,将非零的值,存放在稀疏数组中
       int count = 0;//用于表示稀疏数组的行,此时的值为表头。
       for (int i = 0; i < array1.length; i++) {
           for (int j = 0; j < array1.length; j++) {
               if(array1[i][j]!=0){
                   count++;//检测到有效值,稀疏数组的行数开始增加
                   array2[count][0] = i;
                   array2[count][1] = j;
                   array2[count][2] = array1[i][j];
              }
          }
      }

       //3.4输出稀疏数组
       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]
          );
      }

       System.out.println("。。。。。。。。。");

       //4.还原稀疏数组
       System.out.println("还原: ");
       //4.1读取稀疏数组
       int[][] array3 = new int[array2[0][0]][array2[0][1]];//相当于int[11][11]

       //4.2给其中的元素还原它的值
       for (int i = 1; i < array2.length; i++) {//这里的i=1,因为表头不需要赋值
           array3[array2[i][0]][array2[i][1]] = array2[i][2];
      }
       //4.3打印棋盘
       System.out.println("输出还原的数组: ");
       for (int[] ints : array3) {
           for (int anInt : ints) {
               System.out.print(anInt + "\t");
          }
           System.out.println();
      }
  }
}

运行结果:

输出原始的数组: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 有效值的个数为: 2 稀疏数组: 11 11 2 1 2 1 2 3 2 。。。。。。。。。 还原: 输出还原的数组: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000000000000

Process finished with exit code 0

posted @ 2021-10-06 22:13  木木9_9  阅读(18)  评论(0)    收藏  举报