5.数组拓展

本章目标

  • 一维数组
  • 二维数组
  • 常见数组处理

本章内容

一、一维数组

1、求最大工资(贯穿案例)

有一个员工工资 ,要求求出员工最高的

 int[] Salary = {18000,15000,10000,8000,13000,9000};

示例

 public class TestPay {
 
     public static void main(String[] args) {
          int[] Salary = {18000,15000,10000,8000,13000,9000};
          int max = Salary[0];
          for (int i = 0; i < Salary.length; i++) {
             if(Salary[i]>max) {
                 max = Salary[i];
             }
         }
          System.out.println("最高工资为:"+max);
 
     }
 
 }

2、实现最大值移位到最后

上面的例子已经实现了求最大值,如果想把最大值放到最后一个位置怎么实现?

     public static void main(String[] args) {
         int[] Salary = {18000, 15000, 10000, 8000, 13000, 9000};
         for (int j = 0; j < Salary.length - 1; j++) {
             //如果数组前面的值比后面的值大,则交换
             if (Salary[j] > Salary[j + 1]) {
                 int temp = Salary[j + 1];
                 Salary[j + 1] = Salary[j];
                 Salary[j] = temp;
             }
 
         }
 
     }

3、工资由高到底排序(贯穿案例)

接合上面的数组,已经实现求最大值并移位到最后,那么要实现排序呢?在当前基础上我们需要走n-1趟来完成操作

这里要使用到算法中的冒泡

3.1、冒泡排序思想

以下是要遵循的规则:

  1. 比较两个队员。
  2. 如果左边的队员高,则两队员交换位置
  3. 向右移动一个位置,比较下面两个队员
  4. 沿着这个队列照刚才那样比较下去, —直比较到队列的最右端。

3.2、排序前

image

3.3、排序后

image

3.4、代码实现

 public class Main {
     public static void main(String[] args) {
         int[] Salary = {18000,15000,10000,8000,13000,9000};
         int temp = 0;
         //控制循环趟数
         for (int i = 1; i < Salary.length; i++) {
             //控制比较的次数
             for (int j = 0; j < Salary.length - i; j++) {
                 //如果数组前面的值比后面的值大,则交换
                 if (Salary[j] > Salary[j + 1]) {
                     temp = Salary[j + 1];
                     Salary[j + 1] = Salary[j];
                     Salary[j] = temp;
                 }
 
             }
 
         }
 
         System.out.println("排序后的结果:");
         for (int i = 0; i < Salary.length; i++) {
             System.out.print(Salary[i] + ",");
         }
     }
 }}

4、for each循环

如果使用for循环仅仅是为了遍历读取数组元素的值,整数索引并没有其他特别的用途时,Java还提供了一个简略的循环结构:for…each循环

 public class ForeachDemo {
     public static void main(String[] args) {
         int[] a = new int[] { 45, 76, 13, -77, -23, 15 };
         for (int element : a) {
             System.out.println(element);
         }
     }
 }

二、二维数组(掌握)

1、求多个部门最高工资(贯穿案例)

建立了三个部门的工资数组,想求出工资最高的工资是多少?怎么处理?

定义三个数组

 int[] devSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//研发
 int[] testSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//测试
 int[] webSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//前端

传统解决办法

 package com.woniuxy.shop;
 
 public class TestPay {
 
     public static void main(String[] args) {
         int[] devSalary = { 10000, 8000, 9000, 13000, 18000, 25000 };//后台
         int[] testSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//测试
         int[] webSalary = { 10000, 8000, 9000, 13000, 18000, 19000 };//前端
         int max = devSalary[0];
         //取出后台最高工资
         for (int i = 0; i < devSalary.length; i++) {
             if(devSalary[i]>max) {
                 max = devSalary[i];
             }
         }
         //取出测试最高工资
         for (int i = 0; i < testSalary.length; i++) {
             if(testSalary[i]>max) {
                 max = testSalary[i];
             }
         }
         //取出前端最高工资
         for (int i = 0; i < webSalary.length; i++) {
             if(webSalary[i]>max) {
                 max = webSalary[i];
             }
         }
         System.out.println("最高工资是:"+max);
 
     }
 
 }

我们看上面的代码,我们操作了三个一维数组,写了三个for循环,代码非常的多,作为程序员就会要把繁琐的事情简单化,我们把它改成一个二维数组

2、二维数组定义

二维数组是一个元素为一维数组的一维数组,可以理解为数组中数组

  • 从语法上Java支持多维数组,但从内存分配原理的角度看,Java中只有一维数组,没有多维数组。或者说,从表面上是多维数组,实质上都是一维数组;
  • Java中操作多位数组的语法与一维数组类似。在实际应用中,多维以上的数组很少使用,主要使用一维数组。

3、二维数组声明

 类型说明符[][]  数组名;
      或
 类型说明符  数组名[][];
  • 数据类型为数组元素的类型
  • 用于表明定义了一个二维数组,通过多个下标进行数据访问
  • 数组名[下标]表示二维数组里的一个元素,这个元素还是一个一维数组
  • 数组名下标表示二维数组里的一个元素(一维数组)里的一个元素

4、二维数组初始化

二维数组的初始化两种方式:

直接赋值

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

用new操作符初始化数组

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

例如:
   int array[][];           //声明二维数组
   array = new int[3][4];  //初始化二维数组
或:
   int array[][] = new int[3][4];

赋值

array[0][0] = 8000//第一行第一列
array[0][1] = 7600//第一行第二列
...........
array[2][3] = 12800//第三行第四列

5、实现求最大值

public class TestPay {

    public static void main(String[] args) {
        int[][] Salary = {{ 10000, 8000, 9000, 13000, 18000, 25000 },{ 10000, 8000, 9000, 13000, 18000, 15000 },{ 10000, 8000, 9000, 13000, 18000, 19000 }};//后台

        int max = Salary[0][0];
        for (int i = 0; i < Salary.length; i++) {//迭代行
            for (int j = 0; j < Salary[i].length; j++) {
                if(Salary[i][j]>max) {
                    max = Salary[i][j];
                }
            }

        }
        System.out.println("最高工资为"+max);

    }

}

三、常见数组处理

1、数组排序

在Java中数组的使用是非常频繁的,因此系统也提供了许多有用的类和方法来帮助开发人员处理数组,其中包括:

import java.util.Arrays;
public class SortDemo {
    public static void main(String[] args) {
        int[] array = new int[]{10,2,40,5,2,0,9,1};
        Arrays.sort(array);
        for(int i = 0 ; i < array.length ; i++ ){
            System.out.println(array[i]);
        }
    }
}

2、搜索数组

注意:是对排序后的数组进行搜索,否则可能会出现-索引

   import java.util.Arrays;
    public class ArraySearchDemo {
      public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        System.out.println(Arrays.binarySearch(a, 8));
      }
    }

3、拷贝数组

public class ArrayCopyDemo {
    public static void main(String[] args) {
      int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
      int[] b = new int[100];
      System.arraycopy(a, 1, b, 2, 9);
      for (int i:b)
        System.out.print(i + "  ");
    }
  }

时间充足可以拓展常用工具类

思维导图

image

posted @ 2025-02-23 17:37  icui4cu  阅读(22)  评论(0)    收藏  举报