201621123001 《Java程序设计》第9周学习总结
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:
大概步骤:
- 输入学生名字和不会的问题标号
- 将问题存放在Map的键中,将学生姓名加入到相应的键的值集合中。
- 最后比较值集合的大小,可统计每题不懂的人数。
规范:
姓名 问题标号 问题标号 问题标号
运行截图:
201621123001 《Java程序设计》第9周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 他将Yahoo!Hadoop从20个节点扩展为42000个节点
他将Yahoo!Hadoop从20个节点扩展为42000个节点 http://www.csdn.net/article/2012-11-08/2811629-Interview-Hortonworks ...
- android--------性能优化之Allocation Tracker
Allocation Tracker 能做什么? 追踪内存分配信息,按顺序排列,这样我们就能清晰看出来某一个操作的内存是如何一步一步分配出来的.比如在有内存抖动的可疑点,我们可以通过查看其内存分配轨迹 ...
- 跨域和jsonp的原理
什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: h ...
- Selenium-WebDriver驱动对照表
Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对 chromedriver版本 支持的Chr ...
- 第三周学习进度条+PSP0过程文档
第三周学习进度条 第三周 所花时间(包括上课) 14:30-15:35(65)+19:00-21:20(140)+17:52-19:00(68)+19:10-20:45(95)+21:00-22 ...
- 【实战问题】【2】Ambiguous mapping found. Cannot map 'xxController.Create' bean method
正文: 启动项目时出现该报错. 原因为:在controller中url映射出现重复,@RequestMapping(value = "user/create"). 解决方案为:全局 ...
- leetcode-algorithms-16 3Sum Closest
leetcode-algorithms-16 3Sum Closest Given an array nums of n integers and an integer target, find th ...
- oracle登陆触发器及精细审计
--oracle精细审计FGAselect tab2.userhost 引起操作的主机名,tab2.os_user 引起操作的主机用户,tab2.object_schema 被操作对象所属用户,tab ...
- GitHub学习四-查看版本库信息
首先,只有在本地init以及关联到远程版本库的本地版本库,才能查看版本库信息 1.查看版本库名字 如果忘了名字,直接运行git remote 2.git remote show <name> ...
- 【LeetCode】数组移除元素
链表等复杂数据结构用多了,简单的数组操作也不能遗忘! 1. 给定一个有序数组,移除所有重复元素并返回新的数组长度,不能分配额外数组的内存空间. e.g. 给定输入的数组 = [1,1,2],函数应当返 ...