Java数组篇[10]:数组的常见应用场景

2024-09-16 00:06:34 浏览数 (2)

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在Java编程语言中,数组是一种基本且广泛使用的数据结构。它允许存储一定数量的元素,这些元素通常是相同类型的。数组的应用遍布各个编程领域,从简单的数据存储到复杂的算法实现。本文将探讨Java数组的一些常见应用场景。

摘要

本文将概述Java数组在不同编程任务中的应用,并提供实际的使用案例。通过分析数组在不同场景下的优势和局限性,帮助读者更好地理解数组的实用性和适用性。

概述

数组在Java中的使用非常灵活,它们可以用于实现多种编程任务。以下是一些数组的常见应用场景:

  1. 排序:对元素集合进行排序。
  2. 搜索:在元素集合中搜索特定项。
  3. 矩阵运算:执行数学上的矩阵操作。
  4. 统计分析:收集和分析数据集的统计信息。
  5. 算法实现:作为多种算法的数据结构基础。
  6. 缓存和内存管理:用作缓存来提高数据访问速度。
  7. 多维数据处理:处理具有多个属性的数据集。
  8. 游戏开发:存储和管理游戏状态和数据。
  9. 数据结构基础:作为其他复杂数据结构的构建模块。
  10. 教学和学习:用于教学编程基础和数据结构概念。

源码解析

以下是一些Java数组使用的示例代码:

排序

代码语言:java复制
int[] numbers = {3, 1, 4, 1, 5};
Arrays.sort(numbers);

搜索

代码语言:java复制
int target = 4;
int index = Arrays.binarySearch(numbers, target);

矩阵转置

代码语言:java复制
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6}
};
int[][] transposed = new int[matrix[0].length][matrix.length];
for (int i = 0; i < matrix.length; i  ) {
    for (int j = 0; j < matrix[i].length; j  ) {
        transposed[j][i] = matrix[i][j];
    }
}

使用案例分享

考虑一个场景,我们需要对用户输入的成绩进行排序和计算平均分:

代码语言:java复制
Scanner scanner = new Scanner(System.in);
int[] scores = new int[5];
for (int i = 0; i < scores.length; i  ) {
    scores[i] = scanner.nextInt();
}
Arrays.sort(scores);
double average = Arrays.stream(scores).average().orElse(Double.NaN);

  针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。

这段Java代码演示了如何使用数组来收集用户输入的成绩,对这些成绩进行排序,并计算平均值。以下是对代码的逐行解释:

  1. Scanner scanner = new Scanner(System.in);:创建一个Scanner对象,用于从标准输入(通常是键盘)读取数据。
  2. int[] scores = new int[5];:声明并初始化了一个长度为5的整型数组scores,用于存储用户的成绩。
  3. for (int i = 0; i < scores.length; i ) { scoresi = scanner.nextInt(); } - 这是一个for循环,用于连续读取5个整数输入,这些整数是用户的成绩,并将它们存储在scores数组中。
  4. Arrays.sort(scores);:使用Arrays类的sort方法对scores数组中的元素进行升序排序。
  5. double average = Arrays.stream(scores).average().orElse(Double.NaN);
    • 这行代码使用了Java 8引入的流(Stream)API来计算数组scores的平均值。
    • Arrays.stream(scores)将数组转换为流。
    • average()是流的一个终止操作,它返回一个OptionalDouble,包含计算出的平均值。
    • orElse(Double.NaN)OptionalDouble的方法,如果OptionalDouble为空(意味着数组为空或所有成绩都是0),则返回Double.NaN

当这段代码执行时,程序将首先提示用户输入5个成绩。用户输入完毕后,程序会输出这些成绩排序后的结果,并计算这些成绩的平均值。

示例输出可能如下所示:

代码语言:java复制
原始成绩: [70, 85, 90, 60, 75]
排序后的成绩: [60, 70, 75, 85, 90]
平均成绩: 77.0

请注意,这段代码没有包含用户输入提示和输出成绩的代码。在实际应用中,你可能需要添加额外的代码来提供更好的用户体验,例如打印出每个输入的成绩,并在计算平均值之前和之后提供清晰的输出。

此外,这段代码没有包含关闭Scanner对象的语句。在实际应用中,当不再需要从标准输入读取数据时,应该调用scanner.close()来关闭Scanner,释放与之关联的资源。同时,这段代码没有错误处理机制,比如检查用户输入是否确实是整数。在实际应用中,应该添加适当的异常处理来提高程序的健壮性。

应用场景案例

  • 排序算法教学:使用数组来展示冒泡排序、选择排序等算法。
  • 搜索引擎索引:使用数组作为倒排索引的一部分,快速检索关键词。
  • 股票市场分析:使用数组存储股票价格,分析市场趋势。

优缺点分析

  • 优点
    • 简单易懂,易于实现。
    • 内存连续,访问速度快。
    • 适用性广,可用作多种数据结构的基础。
  • 缺点
    • 长度固定,不够灵活。
    • 多维数组操作相对复杂。
    • 可能存在内存浪费的情况。

核心类方法介绍

  • Arrays.sort():对数组进行排序。
  • Arrays.binarySearch():在已排序的数组中进行二分查找。
  • Arrays.copyOfRange():复制数组的一部分。

测试用例

以下是使用main函数的一个测试用例,演示了数组排序和搜索:

测试代码

代码语言:java复制
/**
 * @Author ms
 * @Date 2024-07-31 11:26
 */
public class Test10 {
    public static void main(String[] args) {
        int[] data = {10, 20, 5, 1};
        System.out.println("原始数组: "   Arrays.toString(data));
        Arrays.sort(data);
        System.out.println("排序后的数组: "   Arrays.toString(data));
        int searchResult = Arrays.binarySearch(data, 20);
        System.out.println("元素 20 的索引: "   searchResult);
    }
}

测试代码执行结果

  根据如上测试用例,我本地演示结果展示如下,仅供参考哈,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

代码分析

  针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。

这段Java代码是一个完整的程序,演示了如何使用Java标准库中的Arrays类对数组进行排序和二分查找操作。以下是对代码的逐行解释:

代码语言:java复制
/**
 * @Author ms
 * @Date 2024-07-31 11:26
 */
  • 以多行注释形式提供了作者信息和日期。
代码语言:java复制
public class Test10 {
  • 定义了一个名为Test10的公共类。
代码语言:java复制
    public static void main(String[] args) {
  • 这是程序的入口点,main方法,它接受一个字符串数组args作为参数。
代码语言:java复制
        int[] data = {10, 20, 5, 1};
  • 声明并初始化了一个整型数组data,包含四个元素。
代码语言:java复制
        System.out.println("原始数组: "   Arrays.toString(data));
  • 打印出原始数组的内容。
代码语言:java复制
        Arrays.sort(data);
  • 使用Arrays类的sort方法对数组data进行排序。
代码语言:java复制
        System.out.println("排序后的数组: "   Arrays.toString(data));
  • 打印出排序后的数组内容。
代码语言:java复制
        int searchResult = Arrays.binarySearch(data, 20);
  • 使用Arrays类的binarySearch方法在已排序的数组data中查找元素20的位置。
代码语言:java复制
        System.out.println("元素 20 的索引: "   searchResult);
  • 打印出元素20在数组中的索引。如果元素不存在,binarySearch方法将返回一个负数。

当这段代码执行时,它将首先打印出原始数组,然后是排序后的数组,最后是元素20的索引位置。输出结果将类似于:

代码语言:java复制
原始数组: [10, 20, 5, 1]
排序后的数组: [1, 5, 10, 20]
元素 20 的索引: 3

这段代码展示了Java中数组排序和查找的基本操作,这些操作在处理数据集合时非常有用。Arrays.sort()方法对数组进行原地排序,而Arrays.binarySearch()方法则利用已排序数组的特点,通过二分查找算法高效地定位元素。如果数组未排序或元素不存在于数组中,binarySearch将返回一个负数,表示元素应该插入的位置以维持排序。在本例中,由于数组已经排序,binarySearch能够直接返回元素20的正确索引,即3。

小结

数组在Java中的使用非常广泛,它们在不同的应用场景下都发挥着重要的作用。从基本的排序和搜索到复杂的算法实现,数组作为一种基础数据结构,其重要性不言而喻。

总结

本文详细介绍了Java数组的常见应用场景,并通过实际代码示例进行了展示。数组以其简单性和高效性,在编程中扮演着不可或缺的角色。虽然它们有局限性,但在适当的场景下使用可以极大地提高程序的性能和可读性。希望读者能够通过本文加深对Java数组应用的理解,并在实际编程中灵活运用。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

0 人点赞