前言:
本学期我开始了Java的学习之旅,从类的学习,输入与输出,到集合与哈希表。下面是一个从类的学习开始的Java学习总结:
类与对象:
类是Java中的基本构建模块,它定义了对象的属性和行为。
对象是类的实例,具体化了类的属性和行为。
类的结构:
类由类名、属性(成员变量)和方法(成员函数)组成。
成员变量用于描述对象的状态,成员方法用于描述对象的行为。
类的定义:
使用关键字class来定义类,语法结构为:class ClassName { }。
类名应该符合命名规范,一般采用驼峰命名法。
成员变量:
成员变量用于描述对象的属性,可以是基本数据类型或引用数据类型。
成员变量可以设置访问修饰符,如public、private、protected和默认(无修饰符)。
成员方法:
成员方法用于描述对象的行为,可以包括普通方法、构造方法和静态方法。
构造方法名与类名相同,用于对象的初始化。
静态方法使用关键字static修饰,可以直接通过类名调用,不需要创建对象。
封装、继承和多态:
封装(Encapsulation):将类的实现细节隐藏起来,只暴露必要的接口给外部。
继承(Inheritance):子类可以继承父类的属性和方法,并且可以在此基础上进行扩展。
多态(Polymorphism):同一方法在不同对象上的行为可能不同,通过方法的重写和重载实现多态性。
在后续的作业集中还自行学习了哈希表的运用,了解到了重写equals()方法与hashCode()方法来确保不会出现哈希冲突,键值对重复的情况。
也学会了正则表达式的运用。
访问修饰符:
Java提供了public、private、protected和默认(无修饰符)四种访问修饰符来控制类的成员的访问权限。
设计与分析:
针对题目集的第一题,我们需要分析题目的要求,设计相应的代码并解释设计思路。该题主要涉及输入输出、正则表达式、集合类、字符串处理等多个方面,因此我们需要综合运用这些知识点来完成题目要求。
首先,我们需要编写一个Java程序,用于读取用户输入的字符串,并根据指定的正则表达式匹配并提取其中的信息。我们可以使用Scanner类来实现用户输入的读取,然后使用正则表达式来匹配提取所需信息。
注意使用():用于捕获匹配的内容。?:用于非贪婪匹配。
Matcher和Pattern类的使用:用于进行正则表达式的匹配和操作。
matcher.find()方法:用于在输入的字符串中查找与正则表达式匹配的文本。
matcher.group(int)方法:用于获取匹配到的文本中特定分组的内容。
字符串转换为整数:通过Integer.parseInt()方法将字符串转换为整数类型。
其次,我们需要将匹配提取到的信息存储起来,这里可以使用集合类来进行存储,例如HashMap或ArrayList等。我们可以将匹配到的信息存储在HashMap中,其中键值对的形式可以使得信息的存储和检索更加方便快捷。
lines = new ArrayList<>();用于储存所有输入行。
在使用正则表达式对其进行划分储存入相应集合以便分别进行处理
pattern1_N = new ArrayList<>();
pattern1_A = new ArrayList<>();
使用强循环对题目行集合进行处理
private LinkedHashMap<Integer, QuestionData> questionMap;使用LinkHashMap对所有题目的题号,内容,答案进行储存
最后,我们需要将存储的信息按照指定的格式进行输出,这里可以使用字符串处理的方法来进行格式化输出。我们可以将HashMap中存储的信息逐条取出,然后按照指定的格式拼接成字符串,并输出到控制台或写入文件中。
运用了方法:StringBuilder 提供了一系列方法来进行字符串的操作,如添加字符、插入字符、删除字符、替换字符等。
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append(isCorrect).append(" ");对其进行添加,它提供了一种高效的方式来构建字符串。
当字符串处理好,最终可以通过 toString 方法将 StringBuilder 对象转换为一个普通的 String 对象。从而进行输出
通过上述分析,我们可以设计出一个满足题目要求的Java程序,并解释了其设计思路和实现方法。
在后续两个作业集中思路是大概一致的但是多了学号,试卷,答卷的输入与输出,和删除题目的功能。
来分别获取学号,答卷的信息,要重新设计正则表达式来匹配对应的字符串输入。然后分别进行处理把数据存入哈希表。
哈希表,具有以下几个主要好处:
快速的查找操作:哈希表通过将关键字映射到数组的特定位置来实现快速的查找操作。通过哈希函数,可以将关键字映射到数组的索引,使得查找操作的时间复杂度接近 O(1),即使在包含大量数据的情况下也能够快速定位到目标数据。
高效的插入和删除操作:除了查找操作外,哈希表也支持高效的插入和删除操作。通过哈希函数确定元素在数组中的位置,插入和删除操作的时间复杂度也接近 O(1)。
适用于大数据量:由于哈希表具有快速的查找、插入和删除操作,因此在处理大量数据时非常高效。即使数据量很大,哈希表仍然能够保持较高的性能。
灵活性:哈希表可以存储各种类型的数据,无论是简单的整数、字符串,还是复杂的对象,都可以作为键或值存储在哈希表中。
解决冲突:在实现哈希表时,通常会采用解决冲突的方法,例如链地址法(Chaining)或开放地址法(Open Addressing)。这些方法可以有效地处理哈希碰撞(即不同关键字映射到同一个位置的情况),保证哈希表的性能和正确性。
采坑心得:
在提交过程中,我遇到了几个问题需要解决。首先是关于正则表达式的编写,需要确保正则表达式能够准确匹配到目标信息,这需要对正则表达式的语法和匹配规则有一定的了解和熟练掌握。其次是关于集合类的使用,需要注意对集合中元素的添加、删除和检索等操作,以及遍历集合并对其中的元素进行操作的方法。
另外,还需要注意异常处理和边界情况的处理,确保程序能够稳定运行并正确处理各种情况下的输入数据。在调试过程中,我发现了一些潜在的问题并及时进行了修复,这有助于提高程序的稳定性和健壮性。
总的来说,通过不断地排查和解决问题,我逐渐掌握了Java编程中的一些技巧和经验,并且对程序的编写和调试有了更深入的理解和认识。
1.哈希表重写方法问题:
问题描述:在使用哈希表时,没有正确重写对象的 equals() 和 hashCode() 方法吗,导致我读取时发现了多个重复数据
影响:导致哈希表无法正确判断两个对象是否相等,从而影响了查找操作的准确性。
数据支持:在未重写方法的情况下,相同的对象可能被哈希表认为是不同的,导致查找失败或者数据错误。
解决方法:确保在使用自定义对象作为键值时,正确重写 equals() 和 hashCode() 方法,以确保哈希表能够正常工作。
2.正则表达式未进行分组问题:
问题描述:在使用正则表达式时,没有进行分组匹配,而是直接使用拆分法获取数据。如:我按空格拆分,但是在其余部位可能包含空格,从而导致我的数据存入失败
影响:导致无法正确获取需要的数据,影响了程序的准确性和效率。
数据支持:通过对比使用正则表达式和拆分法的结果,可以看出正则表达式的匹配更为精准,数据获取更加准确。
解决方法:在使用正则表达式时,合理地进行分组匹配,以便获取需要的数据,并提高代码的可读性和可维护性。
3.使用方法:StringBuilder 时出现输出问题:
问题描述:resultBuilder.append(isCorrect).append(" ");循环构建字符串,导致字符串最后多出空格。
影响:导致无法正确输出案例。
解决方法: String result = resultBuilder.toString().trim();,trim() 方法返回一个新的字符串,其中删除了原始字符串开头和结尾的空白字符。
针对编码改进的建议,我会考虑以下几点来实现可持续改进:
代码可读性:
使用更具描述性的变量名和方法名,以便他人理解和维护代码。
添加必要的注释,解释代码的逻辑和功能,提高代码的可读性。
异常处理:
对可能抛出异常的代码进行适当的异常处理,避免程序意外中断。
性能优化:
使用合适的数据结构和算法,优化程序的性能和效率。
避免不必要的内存和时间消耗,尽量减少资源的浪费。
总结:
通过本阶段三次题目集的练习,我学到了很多关于Java编程的知识和技巧,包括正则表达式、集合类、字符串处理等方面的应用,对程序的设计和实现有了更深入的理解和认识。但同时也发现了一些需要进一步学习和研究的地方,比如对高级知识点和技巧的掌握还不够深入,需要继续努力学习和提高。
标签:匹配,正则表达式,第一次,blog,哈希,字符串,Java,方法 From: https://www.cnblogs.com/yushang257368419/p/18148947