201621123013 《Java程序设计》第9周学习总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。
2. 书面作业
本次作业题集集合
1. List中指定元素的删除(题集题目)
1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。
答:第一个函数中,convertStringToList
函数中,直接用Scanner sc = new Scanner(line);
语句直接将line
字符串分成各个小段(老师没说之前,常用split
方法存入数组中再进行后续操作)。还有一个就是第二个函数进行正向遍历,然后删除str字符(用remove()
方法),还有一个就是要注意删除元素后,关注i的变化(i--)!!!
方法1:
方法2(使用迭代器Iterator):
2. 统计文字中的单词数量并按出现次数排序(题集题目)
2.1 伪代码(不得复制代码,否则扣分)
答:
1、创建一个TreeMap, Map<String(Key),Integer(value)> dict
,Key-->单词,vlaue-->出现次数。
2、用上面函数题有用过的语句Scanner linescanner = new Scanner(words);
进行分割操作。
3、接下来判断单词是否存在在dict
里面,若是不存在,就将其加入,(put
),并将它的vlaue赋为1。若已存在,就将其的vlaue值进行+1操作。整个操作下来,结束,打印单词数。
4、下面接着,创建一个list对象,
List<Entry<String,Integer>> list = new ArrayList<Entry<String,Integer>>(dict.entrySet());
然后用 Collections.sort
方法,对list对象进行排序,排序方法则需要重写-->先按value值进行排序,若是value值相等,再进行Key的比较,也就是字母顺序。
5、最后就是输出映射。
2.2 实验总结
答:本题主要就是关于list对象的创建,第一次用到,会比较陌生,不理解,需要请教同学,还有一个就是Collections.sort()
进行排序,里面的排序方法需要注意排序要求,进行写入。
3. 倒排索引(题集题目)
本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。
3.1 截图你的代码运行结果
答:
3.2 伪代码(不得复制代码,否则扣分)
答:
1、首先创建Map对象word,其中的key和value分别为单词(String)和该单词所对应的行数(ArrayList),再创建一个ArrayList对象。
2、接下来进行读取文章操作,设置条件,要是if到“!!!!!”就退出,否则,就类似前面那题累加词数的。若word已经有对应的key,接下来就要判断,对应key的当前行数是否已经在自己value中,若无,将其添加;若word中没有相应的key,则就更加简单,将单词添加到word中,并且添加对应的行数到value中。
3、遍历输出word中相应的映射。
4、接下来输入我们要查找的元素(每行的string以空格分开),进行比较,若不存在就打印语句“found 0 results”,若存在,就以相应的key去找相应的vlaue值(行数),将其输出。
3.3 实验总结
答:本题难度有点大,做起来好吃力,也就是自己这部分新内容掌握的不是很清楚,一些语法也有好多不懂的地方,此类的题目也是少做,不过好在,我去请教同学,给我细心讲其思路方法,才弄懂这题,反省自己题目做得不够多,还是没有太深入。
4.Stream与Lambda编写一个Student类,属性为:
private Long id;`` private String name;`` private int age;`` private Gender gender;//枚举类型`` private boolean joinsACM;//是否参加过ACM比赛创建一集合对象
,如List,内有若干Student对象用于后面的测试。
4.1 使用传统方法编写一个搜索方法List search(Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)
答:
4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)
答:
5. 泛型类:GeneralStack
题集jmu-Java-05-集合之GeneralStack
5.1 GeneralStack接口的代码
答:
5.2 结合本题与以前作业中的ArrayListIntegerStack相比,说明泛型有什么好处
答:以前作业中的ArrayListIntegerStack
,里面的一些方法(出栈,入栈)我们都定义为Integer
类型了,这就要求我们只能对Integer
类型对象进行操作,要是String类型,就不能进行操作了,这就体现了它局限的地方,而本题我们使用泛型就不会出现这样的问题了,也解决了类型的局限性。前面的总结里面有说到,泛型是允许指定集合中的元素类型(不要担心类型强转的风险),而且在编译阶段就会报错。
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新建文件数 |
---|---|---|---|---|
2 | 0 | 0 | 0 | 0 |
3 | 235 | 235 | 6 | 6 |
5 | 498 | 263 | 13 | 7 |
6 | 711 | 213 | 19 | 6 |
7 | 1237 | 526 | 30 | 11 |
8 | 1670 | 433 | 43 | 13 |
9 | 2352 | 682 | 61 | 18 |
4. 评估自己对Java的理解程度
尝试从以下几个维度评估自己对Java的理解程度
维度 | 程度 |
---|---|
语法 | pta上的一些题目有些问题,通过学习请教能力强的同学也基本可以完成 |
面向对象设计能力 | 这方面的能力比较欠缺,进步的空间很大 |
应用能力 | 觉得把基础打好,感觉自己现在学到的东西才是一些很浅的东西 |
至今代码行数 | 2352 |