首页 > 编程语言 >Java数组篇[10]:数组的常见应用场景

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

时间:2024-08-15 08:58:16浏览次数:17  
标签:10 Java Arrays int 数组 scores 排序

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

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

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

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

前言

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

摘要

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

概述

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

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

源码解析

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

排序

int[] numbers = {3, 1, 4, 1, 5};
Arrays.sort(numbers);

搜索

int target = 4;
int index = Arrays.binarySearch(numbers, target);

矩阵转置

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];
    }
}

使用案例分享

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

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++) {
        scores[i] = 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个成绩。用户输入完毕后,程序会输出这些成绩排序后的结果,并计算这些成绩的平均值。

示例输出可能如下所示:

原始成绩: [70, 85, 90, 60, 75]
排序后的成绩: [60, 70, 75, 85, 90]
平均成绩: 77.0

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

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

应用场景案例

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

优缺点分析

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

核心类方法介绍

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

测试用例

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

测试代码

/**
 * @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类对数组进行排序和二分查找操作。以下是对代码的逐行解释:

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

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

原始数组: [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 !!!


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

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

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

标签:10,Java,Arrays,int,数组,scores,排序
From: https://blog.csdn.net/weixin_66592566/article/details/140824038

相关文章

  • Java中的代理模式(个人学习笔记)
    什么是代理代理是一种设计模式,提供了对目标对象另外的访问方式。(用户不需要直接访问目标对象,只需要接触代理对象就能实现访问)代理的好处目标对象可以被间接访问可以在目标对象实现的基础上实现额外的功能(除了目标对象提供的方法外,代理可以额外提供一些实用的方法),即扩展......
  • 【LeetCode:3148】矩阵中的最大得分(Java)
    题目链接3148.矩阵中的最大得分题目描述给你一个由正整数组成、大小为mxn的矩阵grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为c1的单元格移动到值为c2的单元格的得分为c2-c1。你可以从任一单元格开始......
  • java语言,MySQL数据库;电影推荐网站 30760(免费领源码)计算机毕业设计项目推荐万套实战教
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影推荐网站;电影推荐网站的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本电影推荐网站是针对目前电影推荐网站的实际需求,从实际工作出发,对过去的电影......
  • java语言,MySQL数据库;基于Web的高校知识共享系统设计与实现 32050(免费领源码)计算机毕业
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校知识共享系统等问题,对高校知识共享系统进行研究分析,然后开发设计出高校知识共享系统以......
  • java语言,MySQL数据库;23825基于java的员工考勤系统(免费领源码)计算机毕业设计项目推荐万
    摘 要由于数据库和数据仓库技术的快速发展,员工考勤系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。考勤管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。员工考勤系统除了具有共享系统的全部功能以外,能通过......
  • 假设Sigmund Landers在商业街设置了一个提供建议的摊位,顾客可以购买1分钟,2分钟,或3分钟
    /假设SigmundLanders在商业街设置了一个提供建议的摊位,顾客可以购买1分钟,2分钟,或3分钟的建议,为确保交通每个摊位前排队等待的顾客最多10人,用两个队列模拟两个摊位/#include<stdio.h>#include<stdlib.h>#defineMAX_SIZE10typedefstruct{intitems[MAX_SIZE];......
  • Java 代码本地设置Hadoop用户名密码
    在Hadoop环境中,通常使用Kerberos进行身份验证。但在一些开发或测试环境中,我们可能需要在本地代码中设置用户名和密码来模拟或进行简单的测试。虽然这不是一个安全的做法,因为它违背了Kerberos的使用原则,但在某些场景下(如单元测试或本地开发)可能是必要的。方法一:使用Hadoop的API来......
  • Java流量控制
    java流量控制用户交互ScannerJava.util.Scanner通过Scanner类来获取用户的输入Scanners=newScanner(System.in);next()一定要读取有效字符后才可以结束输入对输入有效字符之前遇到的空白,next()方法会自动将其去掉只有输入有效字符后才将其输入的空白作为分隔符......
  • [Java基础]collection
    数组与集合区别,用过哪些?数组和集合的区别:数组是固定长度的数据结构,一旦创建长度就无法改变,而集合是动态长度的数据结构,可以根据需要动态增加或减少元素。数组可以包含基本数据类型和对象,而集合只能包含对象。数组可以直接访问元素,而集合需要通过迭代器或其他方法访问元素。......
  • 「Day 9 & 10—DP问题」
    DP问题定义什么是\(DP\),答曰:一种通过将全局问题分解成不同的子问题来进行对复杂问题的计算。在我看来就是一种递推的\(ProMax\)版,依旧是用之前计算过的来推出现在要计算的。DP板子问题P1115最大子段和思路我们用\(dp\)数组来定义到\(i\)为止,最大的子段和,那么我们......