201621123040《Java程序设计》第九周学习总结

1.本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容

  • 泛型部分思维导图

  • 集合部分学习总结

  • java.util.Collection 是一个集合接口;java.util.Collections 是一个包装类,是实现Collection的工具类


2.书面作业

2.1List中指定元素的删除(题集题目)

2.1.1实验总结。并回答:列举至少2种在List中删除元素的方法

  • 实验总结:输出List函数部分--通过split()实现分割;foreach实现遍历输出;删除List指定元素函数部分 --通过逐一遍历,将每一个元素与指定元素进行equals();

  • 在List中删除元素的方法:

  • 1.for循环遍历list删除指定元素

  • 2.增强for循环

  • 3.iterator遍历

  • 删除一个特定元素时,三种方法均可使用;删除多个元素时,应使用迭代器iterator

2.2统计文字中的单词数量并按出现次数排序(题集题目)

2.2.1伪代码(不得复制代码,否则扣分)

创建HashMap<String,Integer>
读入单词
遇到"!!!!!"跳出读入循环
foreach遍历(遇到h中没有的key,value=1;遇到h中有的key,在原有的value基础上+1)
Collections.sort实现value降序比较(value相同时,key升序排序)
输出h.size()
foreach输出前十的getkey()和getvalue()

2.2.2实验总结

  • 本题使用Map集合中的HashMap,首先是实现单词的读入;遇到单/多个空格时,使用正则表达式String[] s = x.split(" \\s+");读入过程方法与7-2略有不同,遇到Map中已有的键值,在原有的value基础上加1;反之,令其相应的value值为1,实现相应的循环遍历;通过Map.Entry方法,重写Collections.sort(),实现次数降序输出,遇到次数相同的情况,按键值升序输出;最后输出HashMap.size()和排序在前十的相应键值和次数
    HashMap--当需要键值对表示,又不关心顺序可采用
    TreeMap--当需要键值对,并关心元素的自然排序时可采用

2.3倒排索引(题集题目)

2.3.1截图你的代码运行结果

2.3.2伪代码(不得复制代码,否则扣分)

创建`Map<String, ArrayList<Integer>> h = new TreeMap<String, ArrayList<Integer>>();`
创建`ArrayList`;实现循环输入单词:如果遇到"!!!!!"跳出循环;反之,如果在h中没有找到相应的key,将其添加到h中并将所在的行数值添加到value(ArrayList)中,反之,判断当前行数是否存在于已有的value(ArrayList);
创建迭代器Iterator遍历输出;(完成第一部分)

输入字符串数组(正则表达式空格隔开)
如果h中没有同时存在的要求单词,`System.out.println("found 0 results");`,反之,求要求单词所在行数的交集;
如果不存在交集,`System.out.println("found 0 results");`,反之,输出交集及对应行数(完成第二部分)

2.3.3实验总结

  • 在Map创建过程中就遇到瓶颈,如何确定value的数据类型,通过同学启发使用ArrayList<Integer>来实现;前期读入单词和集合类题目相似,第一部分使用迭代器Iterator实现遍历输出更直接;最困难的部分是实现交集部分所在行数及内容的输出,通过for循环嵌套判断语句按照伪代码的思路一步一步的实现,本题可以说是最为复杂的一道泛型与集合类的PTA题目

2.4Stream与Lambda

编写一个Student类,属性为:
private Long id; private String name; private int age; private Gender gender;//枚举类型 private boolean joinsACM;//是否参加过ACM比赛
创建一集合对象,如List,内有若干Student对象用于后面的测试。

2.4.1使用传统方法编写一个搜索方法List<Student> search(Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)

2.4.2使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)

List<Student> newStudent = student.stream().filter(e -> e!=null&&e.getId()>2016L&&e.getName().equalsIgnoreCase("Lin")&&e.getAge()>18&&e.getGender()==Gender.Male&&e.isJoinsACM()==true).collect(Collectors.toList());

  • 结果与上述一致

2.5泛型类:GeneralStack

2.5.1GeneralStack接口的代码

2.5.2结合本题与以前作业中的ArrayListIntegerStack相比,说明泛型有什么好处

  • 使用interface GeneralStack<T>泛型定义接口,可以按照类型参数表列实现题目要求的Integer Double Car,极大程度上减少代码冗余,使得代码更具灵活性,亦便于修改;与此同时,可以消除代码中出现不必要的强制类型转换现象(避免ClassCastException)

3.码云及PTA

3.1码云代码提交记录

3.2截图PTA题集完成情况图

3.3统计本周完成的代码量

|周次||总代码量||新增代码量||总文件数||新增文件数|
:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐:---😐
|第一周||189||189||10||10|
|第二周||304||304||9||9|
|第三周||557||557||10||10|
|第四周||621||621||8||8|
|第五周||326||326||7||7|
|第六周||972||972||12||12|
|第七周||338||338||4||4|
|第八周||379||379||6||6|
|第九周||492||492||5||5|

4.评估自己对Java的理解程度

|维度||程度|
:---😐:---😐:---😐:---😐:---😐:---😐:---😐
|语法||掌握目前基本的Java语法,PTA的题目基本能完成,但综合类的PTA题目还有一定的难度|
|面向对象设计能力||GUI界面设计还有待提高|
|应用能力||掌握的知识还不够深入,可以借助书籍逐步实现小工具的创建设计|
|至今为止代码行数||将近4000行|

posted @ 2017-11-18 17:55  璨灿  阅读(277)  评论(2编辑  收藏  举报