巧用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电子书籍、简历模板等海量资料。


相关推荐
xmh-sxh-13147 分钟前
jdk各个版本介绍
java
XINGTECODE20 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
天天扭码26 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶26 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺31 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
小曲程序38 分钟前
vue3 封装request请求
java·前端·typescript·vue
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜1 小时前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、1 小时前
Spring Boot 注解
java·spring boot
先天牛马圣体1 小时前
如何提升大型AI模型的智能水平
后端