Java 数组常用操作

作者: yjtuuige | 来源:发表于2022-01-10 13:44 被阅读0次

    数组初始化:

    • 数组初始化后,才能使用。
    • 为数组元素分配空间,并为数组中的每个元素赋值。
    • 初始化分类:
      • 静态初始化:指定长度,由系统赋初始值。
        int[] arr= new int[]{1,2,3,4,5}
        // 简化
        int[] arr2 ={10,20,30.40,50}
        
      • 动态初始化:创建并赋值,由系统计算长度。
        int[] arr=new int[5]
        

    数组常见操作

    • 数组元素的遍历
      package com.xxx.arrays;
      
      public class Demo01 {
          public static void main(String[] args) {
              // 静态初始化
              int[] array = {10, 20, 30, 40, 50};
              // 遍历数组
              // array.length 数组长度(索引从 0 开始,最后索引为 array.length-1)
              for (int i = 0; i < array.length; i++) {
                  System.out.println(array[i]);
              }
          }
      }
      
    • 数组常见的角标越界异常
      // ArrayIndexOutOfBoundsException:数组角标越界异常
      //(最大索引值为 array.length-1,超出后出现异常)
      for (int i = 0; i <= array.length; i++) {
         System.out.println(array[i]);
      }
      
    • 数组元素的反向遍历
      package com.xxx.arrays;
      
      public class Demo02 {
          public static void main(String[] args) {
              int[] array = {10, 20, 30, 40, 50};
              // 数组的反向遍历
              // array.length - 1:最大索引值  i--:从最大索引值自减
              for (int i = array.length - 1; i >= 0; i--) {
                  System.out.println(array[i]);
              }
          }
      }
      
    • 获取数组中元素的最大值或最小值
      package com.xxx.arrays;
      
      public class Demo03 {
          public static void main(String[] args) {
              int[] array = {20, 10, 40, 30, 50};
              // 获取数组中元素的最大值
              // 定义一个参照值(第一个元素,索引 0)
              int max = array[0];
              //  用后一个元素和前一个元素比较,查找最大值,保存到 max
              for (int i = 1; i < array.length; i++) {
                  if (array[i] > max) {
                      max = array[i];
                  }
              }
              System.out.println("数组最大值:" + max);
      
              // 获取数组中元素的最小值
              // 定义一个参照值(第一个元素,索引 0)
              int min = array[0];
              //  用后一个元素和前一个元素比较,查找最小值,保存到 min
              for (int i = 1; i < array.length; i++) {
                  if (array[i] < min) {
                      min = array[i];
                  }
              }
              System.out.println("数组最小值:" + min);
          }
      }
      
    • 数组元素的反转
      package com.xxx.arrays;
      
      import java.util.Arrays;
      
      public class Demo04 {
          public static void main(String[] args) {
              int[] array = {10, 20, 30, 40, 50};
              // 反转数组中的元素
              // 思路:元素首尾互换
              for (int i = 0; i < array.length / 2; i++) {
                  // temp:临时变量  array[i]:首元素(自增)  array.length - 1 - i:尾元素(自减)
                  int temp = array[i];
                  array[i] = array[array.length - 1 - i];
                  array[array.length - 1 - i] = temp;
              }
      //        System.out.println(Arrays.toString(array));
              // 遍历数组
              for (int i = 0; i < array.length; i++) {
                  System.out.print(array[i] + " ");
              }
          }
      }
      

    二维数组

    • 二维数组格式
      package com.xxx.arrays;
      
      public class Demo05 {
          public static void main(String[] args) {
              // 动态初始化二维数组(包含 3 个一维数组,每个一维数组的长度是 2)
              // 可以看成 3 行 2 列
              int[][] array = new int[3][2];
              // 静态初始化
              int[][] array2 = new int[][]{{1, 2}, {3, 4}, {5, 6}};
              // 简化
              int[][] array3 = {{1, 2}, {3, 4}, {5, 6}};
              // 取数组元素
              // array3[1][1]:第二个一维数组的第二个元素(第一个索引为 0)
              System.out.println(array3[1][1]);
      
              // 其它方式定义(一个一维数组 a,和一个二维数组 b)
              int[] a, b[];
              a = new int[1];
              b = new int[2][2];
          }
      }
      
    • 二维数组遍历
      package com.xxx.arrays;
      
      public class Demo06 {
          public static void main(String[] args) {
              int[][] array = {{1, 2, 5}, {3, 4, 2}, {5, 6}};
              // 二维数组的遍历
              // 外循环:遍历二维数组中的一维数组
              for (int i = 0; i < array.length; i++) {
                  // 内循环:遍历一维数组中的每个元素
                  for (int j = 0; j < array[i].length; j++) {
                      System.out.print(array[i][j] + " ");
                  }
                  // 每打印完一个一维数组后,换行
                  System.out.println();
              }
          }
      }
      
    • 实例 1:
      package com.xxx.arrays;
      
      public class Demo07 {
          public static void main(String[] args) {
              // 统计数据之和
              // 第一季度:22,33,55
              // 第二季度:13,28,65
              // 第三季度:66,22,18
              // 第四季度:30,60,77
              // 创建数组
              int[][] array = {{22, 33, 55}, {13, 28, 65}, {66, 22, 18}, {30, 60, 77}};
              // 定义临时变量
              int sum = 0;
              // 遍历二维数组,并计算累加之和
              for (int i = 0; i < array.length; i++) {
                  for (int j = 0; j < array[i].length; j++) {
                      sum += array[i][j];
                  }
              }
              System.out.println("总和:" + sum);
          }
      }
      
    • 实例 2(杨辉三角):
      1. 每一行的第一列和最后一列都是 1。
      2. 从第三行开始,从第二列开始,这个数字等于他上一行的前一列,和上一行的本列之和。
      package com.xxx.arrays;
      
      import java.util.Scanner;
      
      public class Demo08 {
          public static void main(String[] args) {
              // 需求:通过输入行数,打印出杨辉三角
              /*
              1
              1 1
              1 2   1
              1 3   3   1
              1 4   6   4   1
              1 5   10  10  5   1
              */
      
              // 创建 Scanner 对象,接收输入信息
              Scanner sc = new Scanner(System.in);
              System.out.println("请输入行数:");
              int n = sc.nextInt();
              // 定义二维数组,存储数据
              int[][] array = new int[n][n];
              // 1.设置最外边的值(1)
              // 把每行的第一列,和每行的最后一列设置为 1
              for (int i = 0; i < array.length; i++) {
                  array[i][0] = 1;
                  array[i][i] = 1;
              }
              // 2.设置中间值
              // 从第三行开始,从第二列开始,这个数字等于
              // 他上一行的前一列,和上一行的本列之和
              // 外循环:i = 2 第三列开始
              for (int i = 2; i < array.length; i++) {
                  // 内循环:j = 1 第二列开始
                  for (int j = 1; j <= i; j++) {
                      // array[i-1][j-1]:上一行的前一列  array[i-1][j]:上一行的本列
                      array[i][j]=array[i-1][j-1]+array[i-1][j];
                  }
              }
              // 3.遍历输出
              for (int i = 0; i < array.length; i++) {
                  for (int j = 0; j <= i; j++) {
                      System.out.print(array[i][j] + "\t");
                  }
                  System.out.println();
              }
              // 关闭 Scanner
              sc.close();
          }
      }
      

    查找元素索引

    • 方式一:遍历数组挨个查找

      package com.xxx.arrays;
      
      public class Demo09 {
          public static void main(String[] args) {
              int[] array = {90, 10, -5, 20, 88, 40, 12, 30, 20, 50};
              // 查找元素在数组中第一次出现的索引
              int index = getIndex(array, 20);
              System.out.println("该元素的第一次索引:" + index);
          }
      
          private static int getIndex(int[] array, int ele) {
              // 遍历数组
              for (int i = 0; i < array.length; i++) {
                  if (ele == array[i]) {
                      return i;
                  }
              }
              return -1; // 如果没找到返回 -1
          }
      }
      
    • 方式二:二分查找

      • 二分查找前提:数组元素必须有序。
      • 二分查找思想:每次查找中间元素,通过比较大小,能减少一半元素的查找,可提高效率。
      • 通过与中间值比较,比较后三种情况:
        1. 查找的元素,正好是中间索引(mid)对应元素,返回索引值;
        2. 查找的元素,小于中间元素,改变最大索引位置,为中间索引的前一个索引(mid-1),继续查找,直到最大索引(max)和最小索引(min)重合;
        3. 查找的元素,大于中间元素,改变最小索引位置,为中间索引的后一个索引(mid+1),继续查找,直到最小索引(min)和最大索引(max)重合;
      package com.xxx.arrays;
      
      public class Demo10 {
          public static void main(String[] args) {
              // 二分查找:前提,数组必须是有序
              int[] array = {10, 20, 30, 40, 50, 60, 70, 80};
              int index = getIndex(array, 40);
              System.out.println("元素出现的索引:" + index);
          }
      
          private static int getIndex(int[] array, int ele) {
              // 最小索引
              int min = 0;
              // 最大索引
              int max = array.length - 1;
              // 中间索引:(最小+最大)/2
              int mid = (min + max) / 2;
              while (min <= max) {
                  // 等于中间索引,返回中间索引
                  if (ele == array[mid]) {
                      return mid;
                      // 小于中间索引,移动最大索引到中间索引-1
                  } else if (ele < array[mid]) {
                      max = mid - 1;
                      // 大于中间索引,移动最小索引到中间索引+1
                  } else if (ele > array[mid]) {
                      min = mid + 1;
                  }
                  // 重新计算中间索引值
                  mid = (min + max) / 2;
              }
              return -1;  // 找不到返回 -1
          }
      }
      

    常用排序算法

    相关文章

      网友评论

        本文标题:Java 数组常用操作

        本文链接:https://www.haomeiwen.com/subject/iykmcrtx.html