javaSE数组操作随笔

数组

概念

一种常见的数据结构,能够存储一组相同类型的数据

作用

储存一组相同类型的数据结构,方便进行数理统计,也可以进行信息的展示

定义

数据类型[] 数组名;
数组名 = new 数据类型[数组的长度];
数组名 = new 数据类型[]{元素1,元素2,...,元素n}

数据类型[] 数组名 = new 数据类型 [数组的长度];

数据类型[] 数组名 = {元素1,元素2,...,元素n};

注意

  1. 数据类型[] 数组名

  2. new 数据类型[5];

    数组名 = new 数据类型[5];

  3. 注意不同类型默认值

  4. 注意new 数据类型[] 可以先定义再赋值

基本要素

  1. 标识符

    数组名称,是专业术语,本质是变量名

  2. 数组元素

    数组中每一块空间储存的元素

  3. 元素类型

    数组存放的类型

  4. 元素下标

    数组中每一个元素所处的位置就是数组元素的下标,从0开始,最大值为数组长度-1

  5. 特性

    长度一旦定义就不能改变,除非重新赋值

数组操作

  1. 遍历

    将数组中元素全部查看一遍(循环)

  2. 修改数组中的元素

    ed:数列能够被三整除并放回去

    public class example1 {
        public static void main(String[] args) {
            int[] numbers = {10,12,17,32,39,50};
            for (int i = 0; i < numbers.length; i++) {
                if (numbers[i] % 3 == 0) {
                    int result = numbers[i]*numbers[i];
                    numbers[i] *= numbers[i];
                }
            }
        }
    
  3. 向数组中添加元素

    ABCDE F 将F插入到B后面

    public class example2 {
        public static void main(String[] args) {
            String[] persionArr = {"A", "B", "C", "D", "E"};
            String[] newArr = new String[persionArr.length + 1];
            int inDex = 2;
            for (int i = 0; i < inDex; i++) {
                newArr[i] = persionArr[i];
            }
            newArr[inDex] = "F";
            for (int i = inDex ; i < persionArr.length; i++) {
                newArr[i + 1] = persionArr[i];
            }
    
            persionArr = newArr;
            for (int i = 0; i <persionArr.length; i++) {
                System.out.println(persionArr[i]);
            }
        }
    }
    
  4. 删除数组中的元素

    接上题,C离开

    public class example3 {
        public static void main(String[] args) {
            String[] persionArr = {"A", "B", "F", "C", "D","E"};
            String[] newArr = new String[persionArr.length - 1];
            int inDex = 3;
            for (int i = 0; i < inDex; i++) {
                newArr[i] = persionArr[i];
            }
            for (int i = inDex +1; i < persionArr.length; i++) {
                newArr[i-1] = persionArr[i];
            }
            persionArr = newArr;
            for (int i = 0; i < persionArr.length; i++) {
                System.out.println(persionArr[i]);
            }
        }
    }
    
  5. 数组拷贝与扩容

    语法

    System.arrayCopy(原数组,拷贝的开始位置,目标数组,存放的开始位置,拷贝的元素个数;)
    

    示例

    public class example2 {
        public static void main(String[] args) {
            String[] persionArr = {"A", "B", "C", "D", "E"};
            String[] newArr = new String[persionArr.length + 1];
            int inDex = 2;
    //        for (int i = 0; i < inDex; i++) {
    //            newArr[i] = persionArr[i];
    //        }
    //        数组拷贝
            System.arraycopy(persionArr, 0, newArr, 0, inDex);
            newArr[inDex] = "F";
    //        for (int i = inDex ; i < persionArr.length; i++) {
    //            newArr[i + 1] = persionArr[i];
    //        }
            System.arraycopy(persionArr, inDex, newArr, inDex +1, persionArr.length - inDex);
            persionArr = newArr;
            for (int i = 0; i <persionArr.length; i++) {
                System.out.println(persionArr[i]);
            }
        }
    }
    
    public class example3 {
        public static void main(String[] args) {
            String[] persionArr = {"A", "B", "F", "C", "D","E"};
            String[] newArr = new String[persionArr.length - 1];
            int inDex = 3;
    //        for (int i = 0; i < inDex; i++) {
    //            newArr[i] = persionArr[i];
    //        }
            System.arraycopy(persionArr, 0, newArr, 0, inDex);
    //        for (int i = inDex +1; i < persionArr.length; i++) {
    //            newArr[i-1] = persionArr[i];
    //        }
            System.arraycopy(persionArr, inDex + 1, newArr, inDex, newArr.length - inDex -1);
            persionArr = newArr;
            for (int i = 0; i < persionArr.length; i++) {
                System.out.println(persionArr[i]);
            }
        }
    }
    
  6. 数组扩容

    见第四行第七行

    public class example4 {
        public static void main(String[] args) {
            String[] persionArr = {"A", "B", "C", "D","E"};
            String[] newArr = Arrays.copyOf(persionArr, persionArr.length+1);
            int inDex = 2;
            //A B C D E null =>A B C C D E
            System.arraycopy(newArr, inDex, newArr, inDex+1, persionArr.length - inDex);
            //A B C C D E =>A B F C D E
            newArr[inDex] = "F";
            persionArr = newArr;
            for (int i = 0; i < persionArr.length; i++){
                System.out.println(persionArr[i]);
    
            }
        }
    }
    

    二维数组

    1. 数组排序

      数组中的元素从小到大或从大到小顺序依次排列

    2. 冒泡排序

      基本定义跟冒泡一样

      ed:

      public class example5 {
          public static void main(String[] args) {
              int [] number = {10,70,55,80,25,60};
              for(int i=0;i<number.length;i++){
                  for(int j=0;j<number.length -i - 1;j++){
                      if (number[j] < number[j+1]) {
                          int temp = number[j];
                          number[j] = number[j+1];
                          number[j+1] = temp;
                      }
                  }
              }
              for(int i=0;i<number.length;i++){
                  System.out.println(number[i]);
              }
          }
      }
      
    3. 工具类的排序操作

      语法

      Array.sort(数组名);//将数组中的元素进行升序排列
      Arrays.toString(数组名);//将数组中的元素组装为一个字符串
      
      import java.util.Arrays;
      
      public class example5 {
          public static void main(String[] args) {
              int [] number = {10,70,55,80,25,60};
              for(int i=0;i<number.length;i++){
                  for(int j=0;j<number.length -i - 1;j++){
                      if (number[j] < number[j+1]) {
                          int temp = number[j];
                          number[j] = number[j+1];
                          number[j+1] = temp;
                      }
                  }
              }
      //        for(int i=0;i<number.length;i++){
      //            System.out.println(number[i]);
                  System.out.println(Arrays.toString(number));
              
          }
      }
      
      import java.util.Arrays;
      
      public class example6 {
          public static void main(String[] args) {
              char [] chars = {'c','a','g','p','f'};
              Arrays.sort(chars);//对数组进行深序排序
              System.out.println(Arrays.toString(chars));
              String [] names = {"zhangsan","zhangsi","liso","lisib","lisan"};
              Arrays.sort(names);
              System.out.println(Arrays.toString(names));
          }
      }
      
    4. 二分查找法

      又称折半查找 以中间分为两个区间,利用中间元素与目标元素比较大小,从而确定目标元素所处的区间,依次往复执行,直到找到目标元素为止

      二分查找只适用于已经排好序的数组

      ed:从95,93,87,86,79,72,60,53中快速找出元素60所处位置

      public class example7 {
          public static void main(String[] args) {
              int [] numbers = {95,93,87,86,79,72,60,53};
              int target = 60;
              int start = 0;
              int end = numbers.length - 1;
              while (start < end) {
                  int mid = (start + end) / 2;
                  if (numbers[mid] > 60) {
                      start = mid + 1;
                  }else if (numbers[mid] < 60) {
                      end = mid -1;
                  }else {
                      System.out.println("目标元素"+target +"所处位置:" + mid);
                      break;
                  }
              }
          }
      }
      

      二维数组

      public class example8 {
         public static void main(String[] args) {
             String[][] personInfos = new String[10][3];
      
             double[][] agesAndScores = new double[5][2];
             agesAndScores[0] = new double[]{18,60};
             agesAndScores[1] = new double[]{19,65};
             agesAndScores[2] = new double[]{28,90};
             agesAndScores[3] = new double[]{22,55};
             agesAndScores[4] = new double[]{21,60};
      
             String[][] infos = new String[5][];
             infos[0] = new String[]{"刘德华"};
             infos[1] = new String[]{"张学友","很牛逼"};
             infos[2] = new String[]{"张三","学渣","整天不务正业","吃喝嫖赌样会"};
      
         }
      }
      
      public class example9 {
          public static void main(String[] args) {
              String[][] musicInfos = new String[5][3];
              Scanner sc = new Scanner(System.in);
              for (int i = 0; i < musicInfos.length; i++) {
                  System.out.println("Enter music name: ");
                  String name = sc.next();
                  System.out.println("Enter singer name: ");
                  String singer = sc.next();
                  System.out.println("Enter music public time: ");
                  String date = sc.next();
                  musicInfos[i] = new String[] {name, singer, date};
              }
          }
      }
      
public class example10 {
    public static void main(String[] args) {
        double[][][] stuInfos = new double[3][][];
        stuInfos[0] = new double[10][2];
        stuInfos[1] = new double[8][2];
        stuInfos[2] = new double[7][2];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < stuInfos.length; i++) {
            for (int j = 0; j < stuInfos[i].length; j++) {
                System.out.print("Enter student ages: ");
                int age = sc.nextInt();
                System.out.println("Enter student achievement: ");
                double achievement = sc.nextDouble();
                stuInfos[i][j] = new double[]{age,achievement};
            }
        }
        for (int i = 0; i < stuInfos.length; i++) {
            double totalAge = 0,totalAchievement = 0;
            for (int j = 0; j < stuInfos[i].length; j++) {
                totalAge += stuInfos[i][j][0];
                totalAchievement += stuInfos[i][j][1];
            }
            System.out.println("average ages: " + totalAge/stuInfos.length
            + "\naverage achievement: " + totalAchievement/stuInfos.length);
        }
    }
}
posted @ 2025-12-17 19:39  程玖浔  阅读(3)  评论(0)    收藏  举报