第九次作业

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. File类,递归

    File类 File文件和目录路径名的抽象表示形式.即,Java中把文件或者目录(文件夹)都封装成File对象. File类包含     路径    path E:\...     目录 direct ...

  2. LeetCode(Add Two Numbers)

    一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...

  3. 第31章 TIM—基本定时器—零死角玩转STM32-F429系列

    第31章     TIM—基本定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  4. 读取当前路径,列出xls文件

    import java.io.File; public class GetCurrentDirectory { public String GetDirectory() { File director ...

  5. CSS中margin: 0 auto;样式没有生效

    问题:有两个元素: A, B.两则是嵌套关系,A是B的父节点.A和B都是块元素.当在A上设置:margin: 0 auto的时候,B并没有在页面中居中. margin: 0 auto 为什么没有生效? ...

  6. javascript入门笔记3-dom

    1.通过ID获取元素 document.getElementById("id") <!DOCTYPE HTML> <html> <head> & ...

  7. 在Linux上部署Kettle环境

    首先我们有一个正常安装的,桌面版的Linux. Kettle的应用程序是Linux版本与Windows版本在同一个文件夹下共存的,所以可以直接把本机上的Kettle解压,通过FTP工具上传到Linux ...

  8. es6-promise.auto.js

    使用sweetalert2的IE浏览器报错,导入文件 链接:https://pan.baidu.com/s/1mOcsN_o8m-7I7Rej1NPkiw 提取码:9xsj

  9. UVa中国麻将(Chinese Mahjong,Uva 11210)

    简单的回溯题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  10. 【vlan-端口配置】

    搭建好拓扑图如下: 分别配置两台终端的ip地址 创建vlan把e0/4/0接口加入到新的vlan中 连通性失败 . 同理在把e0/4/1加入到vlan视图中 连通性成功 : 搭建好拓扑图如下 进入e0 ...