巧用Java数组:打造自己的数据结构。

咦咦咦,各位小可爱,我是你们的好伙伴------bug菌,今天又来给大家普及Java之数组篇啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

js 复制代码
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在Java开发中,数组是一种常见且重要的数据结构。它可以用于存储多个相同类型的元素。本文将介绍数组的定义、使用方法以及应用场景等内容。

摘要

本文将首先介绍数组的概述,包括数组的定义和基本特性。然后,我们将通过源代码解析来详细说明如何声明、初始化和访问数组。接下来,我们将通过一些实际的应用场景案例,来展示数组在实际开发中的用途。然后,我们将对数组进行优缺点分析,以便读者全面了解使用数组的利弊。随后,我们将介绍数组类的方法和使用方式。最后,我们将给出一些测试用例,并在全文小结中对所学内容进行回顾总结,最终以总结和结尾结束。

概述

数组的定义

在Java中,数组是一种容器,可以存储多个相同类型的元素。数组的长度是固定的,一旦确定就不能改变。数组中的元素可以通过下标进行访问,下标从0开始。

数组的特性

  • 数组是一种引用类型,存储在堆内存中。
  • 数组可以存储各种类型的数据,包括基本类型和对象。
  • 数组的长度是确定的,一旦创建就无法改变。

源代码解析

声明数组

java 复制代码
int[] arr; // 声明一个整型数组

代码拓展

根据如上的代码拓展,给大家个详细解读。 要声明一个整型数组,你可以使用以下代码:

java 复制代码
int[] arr;

这行代码声明了一个名为arr的整型数组。请注意,这只是一个数组的声明,并未定义数组的大小或分配内存空间。在使用数组之前,你需要确定数组的大小,并通过new关键字来分配内存空间,例如:

java 复制代码
arr = new int[5]; // 分配包含5个整数的数组

这将创建一个包含5个整数的数组,并将其分配给arr变量。你也可以同时进行声明和初始化的操作,例如:

java 复制代码
int[] arr = new int[5]; // 声明并分配包含5个整数的数组

初始化数组

java 复制代码
arr = new int[5]; // 创建一个长度为5的整型数组

代码拓展

根据如上的代码拓展,给大家个详细解读。

这段代码创建了一个长度为5的整型数组arr。数组的元素类型是整型(int)。

请注意,此处只是声明了数组,并没有为数组的元素分配具体的值。如果需要为数组的元素赋值,可以使用下标操作符[]来对数组的元素进行访问和修改。例如,arr[0] = 10;将数组的第一个元素赋值为10。

还可以使用循环结构(如for循环)来对数组的元素进行初始化,如下所示:

java 复制代码
for (int i = 0; i < arr.length; i++) {
    arr[i] = i + 1;
}

这段代码将数组的元素分别初始化为1、2、3、4、5。在使用数组之前,建议先为数组的元素进行初始化操作,以避免出现未定义的行为。

访问数组元素

java 复制代码
arr[2] = 10; // 给数组下标为2的元素赋值为10
int num = arr[2]; // 获取数组下标为2的元素的值

代码拓展

根据如上的代码拓展,给大家个详细解读。

根据你的代码片段,数组arr下标为2的元素被赋值为10。要获取该元素的值,可以使用变量num来存储。下面是完整的代码示例:

java 复制代码
int[] arr = new int[3]; // 创建一个长度为3的整数数组
arr[2] = 10; // 给数组下标为2的元素赋值为10
int num = arr[2]; // 获取数组下标为2的元素的值
System.out.println(num); // 输出结果:10

请注意,数组的下标是从0开始的,所以arr[2]表示数组中的第3个元素。

应用场景案例

案例一:计算平均成绩

java 复制代码
package com.example.javase.bugTest;

/**
 * @Author bug菌
 * @Date 2024-02-06 18:21
 */
public class Test {

    public void test() {
        int[] scores = {89, 92, 78, 86, 94}; // 学生成绩数组
        int sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        double average = sum / scores.length; // 计算平均成绩
        System.out.println("平均成绩:" + average);
    }
}

代码拓展

根据如上的代码拓展,给大家个详细解读。

这段代码是用来计算学生的平均成绩的。具体的分析如下:

  1. 创建一个名为scores的整型数组,用来存储学生的成绩。
  2. 创建一个整型变量sum并初始化为0,用来存储成绩的总和。
  3. 使用for循环遍历数组中的每个元素。循环会从0开始,一直到scores.length-1结束。
  4. 在循环中,将每个成绩scores[i]累加到sum中。
  5. 循环结束后,计算平均成绩。将sum除以scores.length,得到一个整数结果。
  6. 创建一个双精度浮点型变量average,将整数结果赋给它,用来存储平均成绩。
  7. 使用System.out.println方法打印平均成绩的结果。

不过需要注意的是,这段代码存在一个问题,即计算平均成绩时使用的是整数除法。如果想要得到精确的平均成绩,应使用浮点除法。修正方法是将计算平均成绩的部分改为: double average = (double)sum / scores.length; 这样可以将sum强制转换为double类型,从而进行浮点除法的计算。这样得到的平均成绩将会是一个浮点数。

案例二:查找最大值

java 复制代码
public void test(){
    int[] numbers = {5, 8, 2, 10, 3}; // 数字数组
    int max = numbers[0];
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }
    System.out.println("最大值:" + max);
}

代码拓展

根据如上的代码拓展,给大家个详细解读。 这段代码的功能是找到给定整数数组中的最大值并打印出来。

代码分析如下:

  • 首先,创建一个整数数组numbers,其中包含了一组数字。
  • 接下来,定义一个变量max,并将其初始值设置为数组中的第一个元素numbers[0]。
  • 使用for循环遍历数组中的每个元素,循环变量i从1开始,直到数组末尾。
  • 在循环体内,通过比较当前数组元素numbers[i]与max的大小来更新max的值。如果numbers[i]大于max,则将max更新为numbers[i]。
  • 最后,使用System.out.println语句将最终的最大值max打印出来。

这段代码通过遍历整数数组并对每个元素进行比较,找到最大值并输出。在给定的数字数组[5, 8, 2, 10, 3]中,最大值是10,所以输出结果将是"最大值:10"。

代码拓展

根据如上的代码拓展,给大家个详细解读。

这段代码是一个求取数组中最大值的方法。代码首先创建一个整数数组numbers,然后通过遍历数组找出其中的最大值。

在代码中,首先将数组中的第一个元素赋值给变量max作为初始值。然后使用for循环遍历数组中的其他元素。每次循环时,将当前元素与max进行比较,如果当前元素大于max,则将当前元素赋值给max。这样,当循环结束时,max将保存数组中的最大值。

最后,使用System.out.println()方法将最大值输出到控制台。

该方法应该被放置在一个类中,并且需要有一个main方法来调用test1方法,例如:

java 复制代码
public class Main {
    public static void main(String[] args) {
        test1();
    }
    
    public static void test1(){
        // 代码逻辑
    }
}

这样才能正确运行。

优缺点分析

优点

  • 数组可以快速访问任意位置的元素,因为数组的元素在内存中连续存储。
  • 数组适合存储一组固定长度的数据,使用方便且效率高。

缺点

  • 数组的长度固定,无法动态改变。
  • 数组的插入和删除操作较复杂,需要移动大量元素。

类代码方法介绍

java 复制代码
package com.example.javase.bugTest;

/**
 * @Author bug菌
 * @Date 2024-02-06 17:58
 */
public class ArrayUtils {

    // 计算数组的平均值
    public static double average(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return (double) sum / arr.length;
    }

    // 查找数组中的最大值
    public static int findMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

拓展:

如上这段代码我定义的是一个ArrayUtils类,包含了两个方法:averagefindMax。下面是对代码的分析:

  1. average方法:这个方法用于计算给定整型数组的平均值,返回一个double类型的结果。它通过一个循环遍历数组的每个元素,并将它们累加到sum变量中。然后,返回sum除以数组长度的结果。需要注意的是,为了得到精确的平均值,sum的类型被转换为了double

  2. findMax方法:这个方法用于查找给定整型数组中的最大值,返回一个int类型的结果。它通过遍历数组的每个元素,将当前的最大值存储在max变量中。在每次遍历时,如果当前元素大于max,则更新max的值。最后,返回max作为最大值。

整体而言,这段代码实现了一些基本的数组操作。注意,代码没有进行输入参数的验证,例如,对于空数组的处理。在实际使用时,应该添加相应的处理逻辑来确保代码的健壮性。

测试用例

测试代码

java 复制代码
package com.example.javase.bugTest;


/**
 * @Author bug菌
 * @Date 2024-02-06 17:57
 */
public class ArrayTest {

    public static void main(String[] args) {
        int[] nums = {3, 1, 4, 1, 5, 9};

        double avg = ArrayUtils.average(nums);
        System.out.println("平均值:" + avg);

        int max = ArrayUtils.findMax(nums);
        System.out.println("最大值:" + max);
    }

}

测试结果

根据如上代码进行测试,执行结果展示如下:

代码拓展

根据如上的代码拓展,给大家个详细解读。   代码看起来是一个简单的Java类,名为ArrayTest。它包含一个main方法,用于测试ArrayUtils类的功能。

在main方法中,首先创建了一个int类型的数组nums,并初始化了其元素值为{3, 1, 4, 1, 5, 9}。

然后,调用ArrayUtils类的average方法,将nums数组作为参数传入。该方法返回nums数组的平均值,并将结果赋给avg变量。

接着,通过System.out.println打印出"平均值:"和avg的值。

接下来,调用ArrayUtils类的findMax方法,将nums数组作为参数传入。该方法返回nums数组中的最大值,并将结果赋给max变量。

最后,再通过System.out.println打印出"最大值:"和max的值。

需要注意的是,这段代码中使用了一个自定义的ArrayUtils类,来提供一些数组操作的功能。你可能需要查看ArrayUtils类的实现来更好地理解代码的功能。

全文小结

本文介绍了Java中数组的基本概念、定义和特性。通过源代码解析和应用场景案例,详细说明了数组的声明、初始化和访问方法。对数组的优缺点进行了分析,并提供了一个存储数字的数组类的代码示例。最后,给出了针对数组类的方法编写的测试用例。

总结

通过本文的学习,我们了解到数组在Java开发中的重要性和应用场景。掌握了数组的定义、初始化、访问和常用操作方法。当需要存储一组固定长度的数据时,可以优先考虑使用数组。

结尾

希望本文能帮助大家更好地理解和运用Java中数组的相关知识。在实际开发中,灵活运用数组可以提高代码效率和质量,在此谢谢大家的耐心阅读!

ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


相关推荐
Q_19284999062 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟19 分钟前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S30 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos37 分钟前
C++----------函数的调用机制
java·c++·算法
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05061 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc1 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Yuan_o_1 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Oneforlove_twoforjob1 小时前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言