第二次大作业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更加有信心。