第九次作业

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

201621123033 《Java程序设计》第9周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本

    jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图.另一份 Android 开发学习路线图.可惜不是MarkDown格式的,所以jixiaohua直接上传的截图,在jixiao ...

  2. react事件绑定的三种常见方式以及解决Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state问题思路

    在 React 组件中,每个方法的上下文都会指向该组件的实例,即自动绑定 this 为当前组件. 而且 React 还会对这种引用进行缓存,以达到 CPU 和内存的优化.在使用 ES6 classes ...

  3. mysql存储问题

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类 ...

  4. Java自定义异常信息

    通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常 1.Spring  注入异常处理类 <bean id ="commonExce ...

  5. 利用sysbench进行MySQL OLTP基准测试

      Preface       In order to know clearly about the real performance threshold of database server,we ...

  6. Angular环境配置

    1.安装node.js 访问官方网站:https://nodejs.org/en/下载node.js,直接下一步安装即可.安装完成打开cmd命令窗口输入node -v出现node版本号安装成功. 2. ...

  7. 路由器基础配置之rip

    我们将以上面的拓扑图进行实验,用rip协议来进行实验,目的是实现三台不同网段的pc机之间实现互相通信 首先为pc机配置好ip地址和网关,配置完IP地址后在配置路由器 router1: enable 进 ...

  8. cmd中编译java脚本 (2013-05-02-bd 写的日志迁移

    此前提是已经搭建好了jdk的编译环境! 先写一个java脚本如:建立一个HelloWord.java //public : 表示此类是公共的 一个java文件中只能有一个public类 //class ...

  9. Python全栈day 01

    Python全栈day 01 一.计算机认识 用户 软件,类似微信.QQ.游戏等应用程序,由程序员编写,在系统中运行,完成各种活动,方便人们使用. 操作系统,主要分为windows系统.Linux系统 ...

  10. 笔记--tslib 编译

    tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...