第二次大作业BLOG心得
(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心得的更多相关文章
- CSAPP HITICS 大作业 hello's P2P by zsz
摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...
- c++小学期大作业攻略(一)环境配置
UPDATE at 2019/07/20 20:21 更新了Qt连接mysql的方法,但是是自己仿照连VS的方法摸索出来的,简单测试了一下能work但是不保证后期不会出问题.如果你在尝试过程中出现了任 ...
- 大二小学期C#资产管理大作业小记
说明 这个程序是我大二夏季学期(俗称小学期)用Visual Studio + C#写的<资产管理>大作业.这个项目非常简单,就是用C#写出一个UI界面,并连接数据库进行增删改查.这是我第一 ...
- OO第二单元——电梯作业总结
前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...
- 哈工大 计算机系统 大作业 程序人生-Hello’s P2P
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机 学 号 班 级 学 生 指 导 教 师 计算机科学与技术学院 2021年6月 摘 要 本文主要通过分析hello这个程序的 ...
- JAVA pta 前三次大作业回顾与分析
一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...
- 2016福州大学软件工程第二次团队作业——预则立&&他山之石成绩统计
第二次团队作业--预则立&&他山之石成绩统计结果如下: T:团队成绩 P:个人贡献比 T+P:折算个人成绩,计算公式为T+T/15*团队人数*P 学号 组别 Team P T+P 03 ...
- #006 C语言大作业学生管理系统第三天
还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...
- C高级第二次PTA作业
6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...
- C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏
邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...
随机推荐
- D365调试进入系统类方法
在生成InventDIMID时,虽然设置了InventDIMID的Number sequence为自定义的Format,但是总是不按指定的Number sequence产生InventDIMID Di ...
- 力扣1076(MySQL)-员工项目Ⅱ(简单)
题目: 编写一个SQL查询,报告所有雇员最多的项目. 查询结果格式如下所示: 解题思路: 方法一:将两个表联结,以project_id进行分组,统计员工数降序排序,然后筛选出第一条数据. 1 sel ...
- 力扣165(java)-比较版本号(中等)
题目: 给你两个版本号 version1 和 version2 ,请你比较它们. 版本号由一个或多个修订号组成,各修订号由一个 '.' 连接.每个修订号由 多位数字 组成,可能包含 前导零 .每个版本 ...
- 力扣461(java)-汉明距离(简单)
题目: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目. 给你两个整数 x 和 y,计算并返回它们之间的汉明距离. 示例 1: 输入:x = 1, y = 4输出:2解释:1 ...
- 漫画 | 一口气搞懂 Serverless !
简介: 第二届云原生编程挑战赛为热爱技术的年轻人提供一个挑战世界级技术问题的舞台,希望用技术为全社会创造更大价值. 作者 | 刘欣 呃,我可能是别人眼中所说的不用奋斗的一代. 大家喜欢听的什么多姿多 ...
- [FE] 浅谈 Chakra UI 的现代化浅封装 - 语义化大行其道
Web2.0 发展至今,网页元素越来越丰富和多样化,数据越来越多. 从需求上来说,也已经不再是展示简单个静态网页,高效的开发交互.打通后端数据,产生了 React 和 Vue 两个著名框架. Re ...
- WPF 如何获取有哪些 VisualBrush 用了某个控件
我写了一个特殊的控件,我期望了解到有哪些 VisualBrush 捕获了此控件,或者说有哪些 VisualBrush 用了此控件的界面 本文的方法需要用到反射,需要使用 WPF 框架里面没有公开的字段 ...
- 提取jks文件证书和私钥
提取jks文件证书和私钥 JKS文件由公钥和密钥构成利用Java Keytool 工具生成的文件,它是由公钥和密钥构成的,公钥就是我们平时说的证书(.cer后缀的文件),私钥就是密钥(.key后缀的文 ...
- WebGL实现简易的局部“马赛克”
前言 接触过Canvas的小伙伴应该都知道,在Canvas2D中我们要加载一个图片很简单,通过调用drawImage API就能将图像绘制到画布上,当然在WebGL中我们也可以绘制图像,在绘制时我们需 ...
- 最好用的AI换脸软件,rope下载介绍(支持cpu)
随着AI技术的广泛运用,市面上的换脸软件也多了起来,今天给各位介绍其中的王者Rope! 先上两个动图,给大伙看看效果 rope是如何实现这种自然的效果呢?这得益于机器学习技术的不断发展,rope经过深 ...