第二次大作业BLOG心得

news/2025/3/16 22:25:31/文章来源:https://www.cnblogs.com/fujiayu/p/18233661

(1)前言:
知识点:
①ArrayLsit的知识点:
ArrayList 是 Java 中的动态数组实现,它提供了自动调整大小的功能,可以根据需要动态增长或收缩。
ArrayList 可以存储任意类型的对象,并支持随机访问,即可以通过索引快速访问列表中的元素。
ArrayList 内部通过数组实现,当元素数量超出当前数组容量时,会自动扩展数组大小,通常是原来容量的 1.5 倍。
ArrayList 允许重复元素,并且可以在列表的任意位置插入和删除元素,但在插入和删除操作时,可能需要移动大量元素,因此性能可能受影响。
ArrayList 是线程不安全的,不适合在多线程环境下使用,如果需要在多线程环境中使用,可以考虑使用 java.util.concurrent.CopyOnWriteArrayList。
②hashmap的知识点:
HashMap 是 Java 中的散列映射实现,它存储键值对,并根据键的哈希码来快速查找值。
HashMap 使用哈希表数据结构来存储键值对,当我们将键值对插入到 HashMap 中时,HashMap 会根据键的哈希码来计算出存储位置,并将键值对存储在对应位置的桶中。
HashMap 允许 null 键和 null 值,并且允许重复的值,但不允许重复的键。
HashMap 的性能在大多数情况下是非常高效的,平均情况下,插入、删除和查找操作的时间复杂度为 O(1),但在最坏情况下可能达到 O(n),这通常发生在哈希冲突较多时。
在 Java 8 之前,HashMap 是不保证元素顺序的,但在 Java 8 中引入了 LinkedHashMap,它保留了元素插入的顺序。
HashMap 是非线程安全的,如果需要在多线程环境中使用,可以考虑使用 java.util.concurrent.ConcurrentHashMap。
③正则表达式的知识点:
正则表达式是一种用来描述字符串匹配规则的工具,它可以用来检查字符串是否符合特定的模式,或者从字符串中提取符合模式的子串。
正则表达式中的基本元字符包括字母、数字和一些特殊字符,例如 . 表示任意字符,* 表示零个或多个前面的字符等。
正则表达式中的量词可以用来指定模式中字符或子表达式的重复次数,例如 + 表示至少一个,? 表示零个或一个,{n} 表示重复 n 次等。
正则表达式还支持字符类、分组、反向引用、边界匹配等高级功能,这些功能使得它在处理复杂的字符串匹配和替换任务时非常强大。
在 Java 中,正则表达式主要通过 java.util.regex 包中的类实现,例如 Pattern 和 Matcher。通过这些类,我们可以在 Java 中使用正则表达式来进行字符串匹配和操作。

在这次作业中,我灵活运用以上三个知识点,使得我对Java的了解更加深入,这也是我作业完成的主要帮手
题量:适中

难度:大

(2)设计与分析:
这是我的设计类图

我设计了13个类
我认为最困难的地方是对设备信息的处理,以下是我对设备信息的处理的代码

(3)采坑心得:
在这次大作业中,我认为最困难的是正确处理信息,在我的输出中出现最多的是输出NULL

原因:输出null的原因是未对输入的数据进行正确的处理
(4)改进建议:
在我的代码中,子类有些重复赘余的部分,例如各设备,因此我通过抽象的方法将他们的重复部分设计于父类中eDevice中,这样不仅简化了代码,而且提高了运行速度,降低了代码之间的耦合度,使得代码可读性更强。
例如:我将子设备的对信息数据的处理抽象于父类eDevice中
(父类的数据处理的抽象方法)

(电扇的数据处理代码)

(灯的数据处理代码)

(5)总结:
①从hashmap的使用中我学会了如何高效地对字符串集合的增加,删除,修改的处理,之前使用链表时,觉得逐一添加很麻烦,还需要查找,但是通过hashmap的使用,大大缩减了代码工程量,除此之外,HashMap 相较于列表(如 ArrayList)具有一些明显的优势和好处,主要包括:

快速查找:

HashMap 使用键值对存储数据,并根据键的哈希码将数据存储在内部的哈希表中。这使得 HashMap 能够在常数时间内(O(1))查找特定的键,而不受到列表中元素数量的影响。相比之下,列表的查找速度取决于元素数量,并且通常需要遍历整个列表来查找目标元素,时间复杂度为 O(n)。
动态调整大小:

HashMap 是一种动态数据结构,它会根据需要自动调整内部存储空间的大小。当元素数量增加时,HashMap 会自动扩展内部哈希表的大小,以保持较低的负载因子。这意味着即使存储大量数据,HashMap 也能保持高效的性能。相比之下,列表的大小通常是固定的,并且在插入大量元素时可能需要重新分配内存空间,导致性能下降。
灵活性:

HashMap 可以存储任意类型的键值对,并且允许键和值都可以为 null。这使得 HashMap 在处理各种类型的数据时非常灵活。相比之下,列表通常只能存储一种类型的元素。
适用于大数据集合:

由于 HashMap 的查找操作效率高,它特别适用于大数据集合中的查找和检索操作。在大型数据集合中,使用 HashMap 可以更快地找到所需的数据,而不必遍历整个数据集合。
键值对关系:

HashMap 的存储方式是键值对的形式,这意味着可以更容易地表示键和值之间的关系。这对于建模实际问题中的映射关系非常有用,例如字典、缓存等。
总的来说,HashMap 在查找效率、动态调整大小、灵活性和适用于大数据集合等方面都比列表更具优势,特别是在需要快速查找和检索数据的情况下,HashMap 是更好的选择。
在代码关联使用和处理信息处我需要多花功夫,例如在这次作业对各设备的数据处理,我无法正确地对数据进行处理,以至于我无法完成数据的正确输出,在接下来的学习过程中,我会加强对数据的处理练习

②学会使用正则表达式的好处
模式匹配:正则表达式允许你指定一种模式,用于在文本中匹配符合该模式的字符串。这种匹配方式非常灵活,可以匹配特定的字符、字符串、字符集合、位置等。

文本搜索和替换:使用正则表达式可以进行高效的文本搜索和替换操作。你可以搜索匹配某个模式的字符串,并对其进行替换或其他处理。

数据提取:通过正则表达式,你可以从文本中提取出符合特定模式的数据。这在数据清洗、提取关键信息等任务中非常有用。

数据验证:正则表达式可以用于验证输入数据的格式是否符合预期。例如,你可以使用正则表达式来验证邮箱地址、电话号码、日期等格式是否正确。

文本处理:正则表达式可以帮助你对文本进行各种复杂的处理,如分割字符串、合并字符串、格式化字符串等。

编程语言支持:几乎所有的编程语言都支持正则表达式,因此你可以在各种不同的编程环境中使用它们。

简洁性和可读性:虽然正则表达式的语法可能看起来有些晦涩,但一旦你熟悉了它,你会发现它可以用非常简洁和高效的方式来表达复杂的模式,从而使代码更加简洁和可读。
③使用文本读入相较于控制台读入的好处:
灵活性:文本读入可以从多种来源读取数据,不仅限于控制台输入。你可以从文件、网络流、内存中的字符串等读取数据,这使得程序更具灵活性。

批量处理:文本读入使得批量处理数据更容易。你可以一次性读取大量数据,而无需逐个输入或等待用户输入。

数据预处理:通过文本读入,你可以在读取数据之前对数据进行预处理,例如去除空白字符、转换数据格式等,从而简化后续的处理过程。

数据重用:读取的数据可以保存在文件中,以便后续重复使用。这在需要多次运行程序或与其他程序共享数据时非常有用。

自动化:文本读入可以与其他程序自动集成,实现自动化处理和数据交换,而无需人工干预。

测试:使用文本读入可以更方便地进行单元测试和集成测试,因为你可以事先准备好输入数据,并在测试中重复使用

在这次迭代作业中,我对自己写代码的能力缺失有了很大认识,接下来的暑假我会努力补上自己的算法能力和编程能力,争取在期末取得好成绩和下学期写好Java的课设。
本校的老师工作十分到位,在遇见难题时老师会积极解答,让我学习Java更加有信心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 函数 形参前带*或者两个星** 收集元组或者字典,实参前带星*或者两个星** 解开序列或者字典

函数的形参前面带一个星*,代表着不定长参数,实际上是收集了不定长的实参,作为一个元组。 形参前面带两个星**,代表可以接收不定长参数,并且调用该函数时实参要指定参数名,实际上是收集了一个不定键个数的字典。 实参前带一个星*,表示解开当前的序列,再做为参数传递。 实…

Address localhost:1099 is already in use

端口号被占用 netstat -ano查出占用这个端口号的进程 在任务管理器里终止

作业总结

这学期才接触java,面向对象以前只在C里面用过一点,所以一开始对于怎么写,以及java语法有点不太适应。 个人体会: ​ 关于类: 1、类似C中的struct,构造函数、内置方法(函数 )都比较相似 2、但是无法重载运算符,这是比较难受的一点。 3、尽量避免代码的重复,把private和p…

TCP概述

概述 TPC:传输控制协议,TCP协议是面向连接的、可以实现端对端通信的可靠的协议。 TCP协议传输数据时会为每个字节分配一个序列号,通过这个序列号就可以判断数据是否重复到达以及数据是否丢失,还可以通过序列号对数据进行排序。 报首格式TCP建立连接的三次握手过程TCP三次挥手…

基于毫米波雷达的手势识别算法

摘要 基于毫米波的手势识别技术提供了良好的人机交互体验。先前的工作专注于近距离手势识别,但在范围扩展方面不够,即他们无法识别距离相当大的噪声运动超过一米的手势。在本文中,我们利用一种新的数据处理方法和定制的人工卷积神经网络(CNN)设计了一个远程手势识别模型。…

POSTGRESQL中时间戳的奥秘timestamptz

哈喽,大家好,我是木头左!一、前言 在日常的数据库操作中,经常会遇到各种时间相关的数据类型,如DATE、TIME、TIMESTAMP等。这些时间类型的处理方式和精度差异,直接影响到对数据的查询和分析结果。今天,就来深入探讨一下POSTGRESQL中的两个重要时间戳类型:timestamp和tim…

6.5数组--模拟、偏移量-螺旋矩阵

6.5打卡M:59.螺旋矩阵II 题意描述给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1:输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n = 1 输出:[[1]]提示:1 <= n <= 20思路这道题目…

【Java】JVM字节码分析

Java 字节码是Java源代码编译生成的中间形式,赋予Java跨平台特性,通过对字节码的分析,可以迅速找到代码的性能瓶颈。一、功能 1、工作原理2、解释和运行 jvm本质上是运行在计算机上的程序,负责运行java字节码文件 对字节码文件中的指令,实时的解释成机器码,供计算机执行 …

23柏鹭杯-misc

我记得比赛的时候,misc都是0解。 怎么不算另类的1血呢? help_me实在不会,arm看不了一点消失的钥匙 先看验证逻辑,能够看到generateZipPassword和decryptFlag这两个方法内容不见了通过在apk中寻找半年,找到一个时间不对的classes3.dex,查看hex发现是gz压缩导出解压一下,拿…

云原生时代:从 Jenkins 到 Argo Workflows,构建高效 CI Pipeline

ACK One Serverless Argo 工作流作为全托管的 Argo 工作流服务,可以帮助您实现更大规模、具有更快的运行速度、及更低成本的 CI Pipeline,与 ACK One GitOps[8](Argo CD)、Argo Event 等事件驱动架构可以构建完整的自动化 CI/CD Pipeline。作者:蔡靖 Argo Workflows Argo …

智慧城市的规划与实施:科技引领城市运行效率新飞跃

随着信息技术的飞速发展,智慧城市的构想正逐步成为现实。作为地理信息与遥感领域的研究者,我深知在这一转型过程中,技术的创新与应用是提升城市运行效率的关键。本文旨在探讨如何利用地理信息系统(GIS)、遥感技术、大数据、物联网(IoT)等前沿科技,推动智慧城市的规划与…