(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更加有信心。

第二次大作业BLOG心得的更多相关文章

  1. CSAPP HITICS 大作业 hello's P2P by zsz

    摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...

  2. c++小学期大作业攻略(一)环境配置

    UPDATE at 2019/07/20 20:21 更新了Qt连接mysql的方法,但是是自己仿照连VS的方法摸索出来的,简单测试了一下能work但是不保证后期不会出问题.如果你在尝试过程中出现了任 ...

  3. 大二小学期C#资产管理大作业小记

    说明 这个程序是我大二夏季学期(俗称小学期)用Visual Studio + C#写的<资产管理>大作业.这个项目非常简单,就是用C#写出一个UI界面,并连接数据库进行增删改查.这是我第一 ...

  4. OO第二单元——电梯作业总结

    前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...

  5. 哈工大 计算机系统 大作业 程序人生-Hello’s P2P

    计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机 学 号 班 级 学 生 指 导 教 师 计算机科学与技术学院 2021年6月 摘 要 本文主要通过分析hello这个程序的 ...

  6. JAVA pta 前三次大作业回顾与分析

    一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...

  7. 2016福州大学软件工程第二次团队作业——预则立&&他山之石成绩统计

    第二次团队作业--预则立&&他山之石成绩统计结果如下: T:团队成绩 P:个人贡献比 T+P:折算个人成绩,计算公式为T+T/15*团队人数*P 学号 组别 Team P T+P 03 ...

  8. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  9. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  10. C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏

    邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...

随机推荐

  1. ArcPy自动绘制大量地图并设置地图要素:Python

      本文介绍基于Python语言中ArcPy模块,实现ArcMap自动批量出图,并对地图要素进行自定义批量设置的方法. 1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有通过Pyth ...

  2. 百万TPS高吞吐、秒级低延迟,阿里​搜索离线平台如何实现?

    导读:阿里主搜(淘宝天猫搜索)是搜索离线平台非常重要的一个业务,具有数据量大.一对多的表很多.源表的总数多和热点数据等特性.对于将主搜这种逻辑复杂的大数据量应用迁移到搜索离线平台总是不缺少性能的挑战, ...

  3. OpenYurt:延伸原生 Kubernetes 到边缘场景下的落地实践

    简介: 随着云原生技术的逐步成熟,阿里云容器服务团队在具体落地实践过程中不断探索云原生技术的应用边界.同时随着物联网和 5G 的迅猛发展,传统的边缘计算架构已经不能满足业务发展的需要. 如何基于云原生 ...

  4. [Blockchain] (Binance Smart Chain) BSC 测试网 BNB 水龙头

    测试网BNB水龙头 https://testnet.binance.org/faucet-smart 测试网区块浏览器 https://testnet.bscscan.com 主网区块浏览器 http ...

  5. git fatal detected dubious ownership in repository 的解决方法

    我换了一台电脑,将旧电脑的硬盘换到新电脑上:我装了双系统,切换到另一个系统时:我发现了 git 代码仓库无法执行 git 命令,不断报错 fatal: detected dubious ownersh ...

  6. vue中使用vue-b2wordcloud创建词云

    安装使用 安装:使用npm install vue-b2wordcloud --save或者直接在vue ui中添加vue-b2wordcloud运行依赖 使用:在main.js中导入使用 impor ...

  7. 举例useContext性能低下的样例,同时推荐用什么方法改进

    在React中,useContext 是一种非常方便的全局状态管理工具,它可以让我们在组件之间共享状态,而不需要通过层层传递 props.然而,当我们在一个大型的 React 应用中过度使用 useC ...

  8. vue-单独引入css文件,设置公共的css样式或者修改默认的vant,mint样式

    1.css文件夹下新建global.css文件并粘贴复制: ======================= :root{     --bgColor : #d3252a;     --pinkColo ...

  9. vue监听watch

    export default { watch:{         showArea(val,_val){                            console.log('showAre ...

  10. Go-Zero微服务快速入门和最佳实践(一)

    前言 并发编程和分布式微服务是我们Gopher升职加薪的关键. 毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言进行简单项目的开发. 虽说好上手,但是想和别人拉开差距,提高自 ...