学科分类
目录
Java基础

数组的常见操作

在程序开发中,数组的应用非常广泛,灵活地使用数组对实际开发很重要。接下来,本节将针对数组的常见操作,如数组的遍历、最值的获取、数组的排序等,进行详细地讲解。

1.数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例来学习一下如何使用for循环来遍历数组,如文件1所示。

文件1 Example22.java

 1    public class Example22 {
 2        public static void main(String[] args) {
 3            int[] arr = { 1, 2, 3, 4, 5 };  // 定义数组
 4            // 使用for循环遍历数组的元素
 5            for (int i = 0; i < arr.length; i++) {
 6                System.out.println(arr[i]); // 通过索引访问元素
 7            }
 8        }
 9    }

运行结果如图1所示。

图1 运行结果

文件1中,定义了一个长度为5的数组arr,数组角标的取值范围为0~4。由于for循环中定义的变量i的值在循环过程中为0~4,因此可以作为索引,依次去访问数组中的元素,并将元素的值打印出来。

2.数组最值

在操作数组时,经常需要获取数组中元素的最值。接下来通过一个示例来演示如何获取数组中元素的最大值,如文件2所示。

文件2 Example23.java

 1    public class Example23 {
 2        public static void main(String[] args) {
 3            // 1、定义一个int[]数组
 4            int[] arr = { 4, 1, 6, 3, 9, 8 }; 
 5            // 2、定义变量max用于记住最大数,首先假设第一个元素为最大值
 6            int max = arr[0]; 
 7            // 3、遍历数组,查找最大值
 8            for (int i = 1; i < arr.length; i++) {
 9                // 比较 arr[i]的值是否大于max
 10                if (arr[i] > max) { 
 11                    // 条件成立,将arr[i]的值赋给max
 12                    max = arr[i];   
 13                }
 14            }
 15            System.out.println("数组arr中的最大值为:" + max); // 打印最大值
 16        }
 17    }

运行结果如图2所示。

图2 运行结果

文件2中,定义了一个临时变量max,用于记住数组的最大值。首先假设数组中第一个元素arr[0]为最大值,然后使用for循环对数组进行遍历,在遍历的过程中只要遇到比max值还大的元素,就将该元素赋值给max,这样一来,变量max就能够在循环结束时记住数组中的最大值。

3.数组排序

在操作数组时,经常需要对数组中元素进行排序。接下来讲解一种比较常见的数组排序算法——冒泡排序。所谓冒泡排序,就是不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

接下来通过几个步骤来具体分析一下冒泡排序的整个过程,具体如下:

第1步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮比较。

第2步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在了倒数第二个位置。

第3步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。

​ 了解了冒泡排序的原理之后,接下来通过一个案例来实现冒泡排序,如文件3所示。

文件3 Example24.java

 1    public class Example24 {
 2        public static void main(String[] args) {
 3            int[] arr = { 9, 8, 3, 5, 2 };
 4            // 1、冒泡排序前,先循环打印数组元素
 5            for (int i = 0; i < arr.length; i++) {
 6                System.out.print(arr[i] + " ");
 7            }
 8            System.out.println(); // 用于换行
 9            // 2、进行冒泡排序
 10            // 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)
 11            for (int  i= 1; i < arr.length; i++) {
 12                // 2.2、内层循环定义第i轮需要比较的两个数
 13                for (int j = 0; j < arr.length -i; j++) {
 14                    if (arr[j] > arr[j + 1]) { // 比较相邻元素
 15                        // 下面的三行代码用于相邻两个元素交换
 16                        int temp = arr[j];
 17                        arr[j] = arr[j + 1];
 18                        arr[j + 1] = temp;
 19                    }
 20                }
 21            }
 22            // 3、完成冒泡排序后,再次循环打印数组元素
 23            for (int i = 0; i < arr.length; i++) {
 24                System.out.print(arr[i] + " ");
 25            }
 26        }
 27    }

运行结果如图3所示。

图3 运行结果

文件3中,第2步通过一个嵌套for循环实现了冒泡排序。其中,外层循环用来控制进行多少轮比较,每一轮比较都可以确定一个元素的位置,由于最后一个元素不需要进行比较,因此外层循环的次数为arr.length-1;内层循环的循环变量用于控制每轮进行比较的相邻的两个数,它被作为角标去比较数组的元素,由于变量在循环过程中是自增的,这样就可以实现相邻元素依次进行比较,在每次比较时,如果前者小于后者,就交换两个元素的位置,具体执行过程如图4所示。

图4 冒泡排序

从图4可以看出,在第一轮比较中,第一个元素“9”为最大值,因此它在每次比较时都就会发生位置的交换,最终被放到最后一个位置;第二轮比较与第一轮过程类似,元素“8”被放到倒数第二个位置;第三轮比较中,第一次比较没有发生位置的交换,在第二次比较时才发生位置交换,元素“5”被放到倒数第三个位置;第四轮比较只针对最后两个元素,它们比较后发生了位置的交换,元素“3”被放到第二个位置。通过四轮比较,很明显,数组中的元素已经完成了排序。

值得一提的是,文件3中第16~18行代码实现数组中两个元素交换的过程。首先定义了一个临时变量temp用于记住数组元素arr[j]的值,然后将arr[j+1]的值赋给arr[j],最后再将temp的值赋给arr[j+1],这样便完成了两个元素的交换。整个交换过程如图5所示。

图5 交换步骤

点击此处
隐藏目录