1. 本周学习总结

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

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

  • 关于泛型
<T extends Comparable <T> > T max(List<T>list)
//编写方法max可以返回list中所有元素最大值,List中元素实现Comparable接口
//通配符的超类型
Pair <? super Manager >result;
  • 关于stream(), filter(), collect()
  List<Integer>integerList = new ArrayList<>();
integerList.stream().filter(e -> e>5).collect(Collectors.toList());
//实现功能:将所有大于5的生成一个新的List对象

2. 书面作业

本次作业题集集合

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

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

Answer:本题要求编写两个函数covnertStringToList函数remove函数。将元素以空格为分隔符直接用sc.next()实现即可,放入列表中直接可以用add()方法,返回列表。移除相同元素可遍历列表,用equals方法比较,在删除元素的时候我是直接用list.remove(int)实现,值的注意的是从size-1开始反向遍历。

在List中删除元素的方法:

  • 直接用List中的remove
 public static void remove(List<String> list, String str){
for (int i = list.size()-1;i >= 0;i--){
if (str.equals(list.get(i))){
list.remove(i);
}
}
}
  • 用迭代器Iterator的remove
 public static void remove(List<String> list, String word) {
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String str = (String) iterator.next();
if (str.equals(word))
iterator.remove();
}
}

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

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

Answer:

get str
if str.equals("!!!!!")
break;
else if contains str -> change value
else put
compare value
print

2.2 实验总结

Answer:因为这道题是上周写的,实验总结已经在上一周的博客中写过了。(再做点补充好了)

  • 本题选用Map,定义为:
Map<String,Integer> treeMap = new TreeMap<String,Integer>();
  • 因为要统计出每个单词出现的次数,就需要改变键所对应的值
	if (str.equals("!!!!!")){
break;
} else if(!treeMap.containsKey(str))
treeMap.put(str, 1);
else{
int n = treeMap.get(str);
treeMap.put(str, n + 1); }
  • 要求按照出现次数排序,就用到了lambda表达式比较值
Collections.sort(list,((o1, o2) -> o2.getValue().compareTo(o1.getValue())));

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

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

3.1 截图你的代码运行结果

运行结果:

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

while sc.hasNextLine()
输入 line
if line.equals("!!!!!") break;
String[] word = line.split(" ");
遍历word[]
if (map.containsKey(word[i]))
number = map.get(word[i]);
number.add(行数);
map.put(单词, 行数的集合);
print all; 输入查询关键字
遍历每一行
if (某行contains关键字)
在集合中加入行号
如果没找到 print("found 0 results");
如果找到 print(行集与行集内每一行的内容);

3.3 实验总结

Answer:

  • 定义一个动态数组储存输入的每一行(刚开始时候没有定义这个,导致后面查找关键字无从下手),以及定义一个集合(形成单词与所在行数的集的映射)
 ArrayList<String> words = new ArrayList<String>();
TreeMap<String,Set<Integer>> map = new TreeMap<String,Set<Integer>>();
  • 在查找关键字时候真的是逻辑混乱,理一下:输入了一行,然后空格分割每个单词,在每一行中遍历,保证输入的每一个单词都在每一行进行查找,如果有一个单词不包含,那就跳过这行。否则就可以加入行数。

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

选用id> 3L ,name=zhangyilin,age>17,gender=Famale,参加过ACM比赛

截图:

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

 List<Student>result = Arrays.stream(students)
.filter(student -> student!=null && student.getId()>3L
&& student.getName().equals("zhangyilin")
&& student.getAge()>17
&& student.getGender().equals(Gender.Famale)
&& student.isJoinsACM()
).collect(Collectors.toList());

截图:

5. 泛型类:GeneralStack

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

5.1 GeneralStack接口的代码

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

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

Answer:以前作业中的ArrayListIntegerStack一旦定义完毕,就只能存放Integer数据类型。但是如果这个栈还需要操作其他的数据类型呢?这时候就可以定义成泛型的,即没有明确定义是哪一个类型,因为对所有类型数据都适用,那它就是公用的,这么一来,就可以免去了定义很多个不同数据类型的操作。岂不是美滋滋,就可以减少很多不必要的代码。

6. 选做:泛型方法

基础参考文件GenericMain,在此文件上进行修改。

6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中strList为List<String>类型。也能使得Integer maxInt = max(intList);运行成功,其中intList为List<Integer>类型。注意:不得直接调用Collections.max函数。

max方法:

public static <E extends Comparable<E>> E max(List<E> list){
Collections.sort(list);
return list.get(list.size()-1);
}

截图:

6.2 选做:现有User类,其子类为StuUser,且均实现了Comparable接口。编写方法max1,基本功能同6.1,使得User user = max1(stuList);可以运行成功,其中stuList为List类型。也可使得Object user = max(stuList)运行成功。

max1方法:

 public static <E extends Comparable<? super E> > E max1(List<E> list,Comparator<? super E>age){
Collections.sort(list,age);
return list.get(list.size()-1); }

截图:

6.3 选做:编写int myCompare(T o1, T o2, Comparator c)方法,该方法可以比较两个User对象,也可以比较两个StuUser对象,传入的比较器c既可以是Comparator<User>,也可以是Comparator<StuUser>。注意:该方法声明未写全,请自行补全。

int myCompare(T o1, T o2, Comparator c)方法:

 public static <E extends User>int myCompare(E o1,E o2,Comparator <? super E>c ){
return c.compare(o1,o2);
}

截图:

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

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

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

Answer:

wordset.add(word)
line = sc.nextLine
for i = line.length -> 0
for j= 0 -> i
if(wordset.contains(line.sub(j,i)))
list1.add();
if (no found )
list1.add(line.sub(j-1,i));
for i = list1.size-1 -> 0
print

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

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

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

3.3 统计本周完成的代码量

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

自己的目标能实现吗?

周次 总代码量 新增代码量 总文件数 新增文件数
1 374 374 5 5
2 889 515 15 10
3 1417 528 22 7
4 1838 421 27 5
6 2608 770 38 11
7 3270 662 48 10
8 4068 798 52 4
9 4543 475 60 8
10 4988 445 65 5

我原来的目标就是每周代码量在百行,目前看来,每周都达到了。

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

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

维度 程度
语法 PTA的题目基本能搞定,常用的语法可以熟练运用。有个别题目还是需要寻求帮助。
面向对象设计能力 目前主要思想就是面向对象编程,但是如果要说可以熟练的使用面向对象思想为所要解决的问题建模,我觉得说不上熟练但是应该是可以的。
应用能力 貌似还没有使用Java编写过什么实用简单的小工具
至今为止代码行数 4988

选做:5.使用Java解决实际问题

有n门课程,每个学生对每门课程都有几个不懂的问题(每题都有标号)。教师期望对所有学生的问题进行归类,首先对问题按课程分类,在某类中又将同一个学生的题目归类在一起。现有的操作流程,是每个学生把自己的各科目中不懂得题目按课程分类号后发给学习委员,学习委员进行统一汇总。现在希望编写一个程序,帮助学习委员分类,并统计每门课程中哪些题目不懂率最高。尝试写出解决该问题的大概步骤?每个学生发给学习委员的文件内容应遵循一定规范方便程序处理,尝试写出该规范。

Answer:

  • 大概步骤:

    1. 输入学生名字和不会的问题标号
    2. 将问题存放在Map的键中,将学生姓名加入到相应的键的值集合中。
    3. 最后比较值集合的大小,可统计每题不懂的人数。
  • 规范:

    姓名 问题标号 问题标号 问题标号

  • 运行截图:

201621123001 《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. Shell Trap信号管理

    trap命令用于指定在接收到信号后将要采取的动作.常见的用途是在脚本程序被中断时完成清理工作.不过,这次我遇到它,是因为客户有个需求:从终端访问服务器的用户,其登陆服务器后会自动运行某个命令,例如打开 ...

  2. MapReduce处理气象数据

    老师:MissDu 提交作业 1. 用Python编写WordCount程序并提交任务 程序 WordCount 输入 一个包含大量单词的文本文件 输出 文件中每个单词及其出现次数(频数),并按照单 ...

  3. linux权限管理之文件属性

    文件属性 chattr ======================================================== 文件权限管理之: 文件属性注:设置文件属性(权限),针对所有用 ...

  4. 20181011xlVba提取邮箱手机号码

    Sub TransferData() AppSettings Dim StartTime As Variant Dim UsedTime As Variant StartTime = VBA.Time ...

  5. Gifts by the List CodeForces - 681D (思维)

    大意: 给定森林, 要求构造一个表, 满足对于每个$x$, 表中第一次出现的$x$的祖先(包括$x$)是$a_x$. 刚开始还想着直接暴力分块优化一下连边, 最后按拓扑序输出... 实际上可以发现$a ...

  6. Date类型与String类型的相关问题

    今天完成boss交代的任务时,遇到Date类型与String类型的相关问题,参考了网上的一些例子,并且自己写了demo,现在记录下了总结一下: (一)判断一个字符串是不是合法的日期格式 public ...

  7. hdu-1817-polya

    Necklace of Beads Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. Vue keep-alive总结

    <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...

  9. vue组件生命周期详解

    Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...

  10. Utils--字符串的帮助类

    Utils--字符串的帮助类 一个关于字符串过滤的工具类,主要时针对username和password的过滤 package com.bw.yun.utils; import java.securit ...