第九次作业

1. 本周学习总结

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

1.2 选做:收集你认为有用的代码片段

//stream(),filter(),collect()
List<Student> newstudent = stuList.stream().filter(e -> e!=null&&e.getId()>id&&e.getName().equals(name)&&e.getAge()>age&&e.getGender().equals(gender)&&e.isJoinsACM()==joinsACM).collect(Collectors.toList());

2. 书面作业

本次作业题集集合

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

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

总结:remove函数中一开始使用正序遍历List,然后发现删除后后面的元素序号就变了,试图解决这个问题,然而,太复杂了,于是改变思路,换成倒序遍历,这个问题就很轻易地解决掉了。

    /*倒序删除法*/
public static void remove(List<String> list, String str){
for(int i=list.size()-1;i>=0;i--){
if(list.get(i).equals(str)){
list.remove(i);
}
} } /*使用removeAll来删除元素*/
public static void remove(List<String> list,String str){
List newlist=new ArrayList();
for(int i=0;i<list.size();i++){
if(list.get(i).equals(str)){
newlist.add(list.get(i));
}
}
list.removeAll(newlist);
}

亲测有效↓

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

啊,上次作业做过了,就放一样的了。

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

创建HashMap对象map
开始循环
if 读入单词为"!!!!!"
退出循环
else if map中没有对应key
添加单词到map中并设置value为1
else
将key对应的value值加1
创建ArrayList对象list
实现Collections接口对map对象进行排序
输出map的长度
输出排序后list中前十个数据

2.2 实验总结

一开始是先创建了一个String[]类型的对象来存储这些输入的单词,然后想一个个遍历再放进map中,结果发现放入map的过程中会出现空指针错误,最后参照7-2的方式,输入一个单词就放进map中。后面排序使用ArrayList实现Colletions接口来实现。

3. 倒排索引(题集题目)

本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。

3.1 截图你的代码运行结果

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

创建TreeMap map
创建列表s
while(有下一行文本)
if str为!!!!!
退出循环
else
将str加入列表s中
if map中没有对应的key
将单词及其所在行数添加到map中
else
if 当前行数未存在于value中
将当前行数添加到value中
创建迭代器Iterator
遍历map输出其内容
while(true)
if 索引内容为空
输出found 0 results
else
if map中不全包含索引内容
输出found 0 results
else
求索引内容中所有单词所在行数(value)的交集
if 交集为空
输出found 0 results
else
输出交集及对应行数的内容

3.3 实验总结

之前一直没怎么用过迭代器,所以就不太熟,这次这道题目好好查了一下相关内容,算是有收获吧。后面求索引内容的行数交集的时候自己编了一些方法都没成功,最后悄悄问了同学发现直接用retainAll方法就行了............

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<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)

//search方法
List<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM){
List<Student> newstudent=new ArrayList<Student>();
for(Student e:stuList){
if(e.getId()>id&&e.getName().equals(name)&&e.getAge()>age&&e.getGender().equals(gender)&&e.isJoinsACM()==joinsACM){
newstudent.add(e);
//System.out.println(e);
}
}
return newstudent; }
//测试数据
List<Student> student = new ArrayList<Student>();
student.add(new Student(7L,"yao",18,Gender.Male,false));
student.add(new Student(8L,"zeng",20,Gender.Famale,true));
student.add(new Student(66L,"yao",17,Gender.Famale,false));
student.add (new Student(20L,"li",19,Gender.Male,true));
student.add(new Student(33L,"yao",19,Gender.Famale,true));
student.add(new Student(52L,"liu",21,Gender.Male,false));
student.add(new Student(45L,"luo",20,Gender.Male,true));
//main
List<Student> newStudent=search(student,40L, "yao",15,Gender.Famale, false);
System.out.println("201621123033 姚雯婷");
System.out.println(newStudent.toString());

输出结果:

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

static List<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM){
List<Student> newstudent = stuList.stream().filter(e -> e!=null&&e.getId()>id&&e.getName().equals(name)&&e.getAge()>age&&e.getGender().equals(gender)&&e.isJoinsACM()==joinsACM).collect(Collectors.toList());
return newstudent; }
//测试数据
List<Student> student = new ArrayList<Student>();
student.add(new Student(7L,"yao",18,Gender.Male,false));
student.add(new Student(8L,"zeng",20,Gender.Famale,true));
student.add(new Student(66L,"yao",17,Gender.Famale,false));
student.add (new Student(20L,"li",19,Gender.Male,true));
student.add(null);
student.add(new Student(33L,"yao",19,Gender.Famale,true));
student.add(new Student(52L,"liu",21,Gender.Male,false));
student.add(null);
student.add(new Student(45L,"luo",20,Gender.Male,true));

运行结果:

5. 泛型类:GeneralStack

题集jmu-Java-05-集合之GeneralStack

5.1 GeneralStack接口的代码

interface GeneralStack<E> {
E push(E item);
E pop();
E peek();
public boolean empty();
public int size(); }

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

以前作业中的ArrayListIntegerStack中的元素只能为Integer类型,但使用泛型后栈中元素可以为多种类型,这样就不用再编写存放不同数据类型的栈,减少了代码量。

PS:这题...反复提交相同的代码出现了内部错误和部分正确的情况,后来试着提交之前提交过结果是完全正确的同学的代码,结果也出现了部分正确的情况,所以在想是不是PTA出bug了???

7. 选做:逆向最大匹配分词算法

集合实验文件中的第07次实验(集合).doc文件,里面的题目6.

7.1 写出伪代码(不得直接复制代码)

创建HashSet set
将词表添加到set中
while(有下一行文本){
创建列表list来存放词汇
while 未扫描字数大于0
for j=i-1->0
if 截取字符串(j,i)存在与set中
将截取字符串(j,i)添加到列表list中
i=j
j=i-1
continue
倒序输出列表list中的元素
}

7.2 截图你的代码运行结果。

ps:将词汇添加到集合的时候,如果使用下面的代码

 while(sr.hasNext()){
String word=sr.next();
set.add(word);
}
System.out.println(set.toString());

输入词汇后没有打印出来集合,猜测是不是sr.hasNext的原因....

后来用了先放进数组里再遍历添加到set中就可以了

3.码云及PTA

题目集:jmu-Java-05-集合

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)





|

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

自己的目标能实现吗?

周次 总代码量 新增代码量 总文件数 新增文件数
3 547 547 12 12
5 971 424 20 8
6 1577 606 29 9
7 2187 1216 41 21
8 2793 606 49 8
9 3040 247 56 7
10 3617 577 63 7

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

尝试从以下几个维度评估自己对Java的理解程度

维度 程度
语法 PTA上的题目大多数能做出来,语法感觉还是学的不太系统,不过通过百度和询问同学基本能解决
面向对象设计能力 感觉这一块也不是很熟练,虽然做购物车的时候感觉还行
应用能力 大概能写一些最简单的?
至今为止代码行数 3617

最新文章

  1. Servlet的生命周期及工作原理
  2. c语言一些知识点的记录
  3. MYSQL数据库------操作命令笔记
  4. BZOJ2595[WC2008]游览计划
  5. EHcache缓存框架详解
  6. 单元测试写cookie
  7. Android-Activity使用(2)
  8. Jquery 中map和each的区别
  9. Cocoa Pods的安装
  10. CPU工作方式、多核心、超线程技术详解[转贴]
  11. 微信小游戏开发之四:使用three.js引擎
  12. How to view the DNS address assigned by DHCP
  13. os及os.path练习题
  14. 【node】node连接mongodb操作数据库
  15. Android内存泄漏的检测流程、捕捉以及分析
  16. python 列表返回重复数据的下标
  17. java 对一个字符串进行加减乘除的运算
  18. Zoomit的用法总结
  19. SpringBoot的json序列化及时间序列化处理
  20. .net WinForm 的数据绑定

热门文章

  1. A Multigrid Tutorial中涉及到的难点词汇
  2. Linux笔记(开机自动将kerne log保存到SD卡中)
  3. pycharm中常用设置
  4. gulp详细教程——前端自动化构建工具
  5. 1.Spring Cloud初相识--------简单项目搭建
  6. Java中如何输入一个字符
  7. Java - 得到项目中properties属性文件中定义的属性值
  8. PLC状态机编程第一篇-状态机介绍
  9. Gold Balanced Lineup POJ - 3274
  10. 11-Json文件配置