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 ...
随机推荐
- Hibernate第一个程序(最基础的增删改查) --Hibernate
本例实现Hibernate的第一个程序,Hibernate的优点我想大家都很清楚,在这里不做过多赘述.总之,使用Hibernate对数据库操作,也就是来操作实体对象的! 项目目录: 一.第一步要做的就 ...
- MySQL视图(view)
一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...
- Mybatis中int insertSelective()的相关问题
1.selective的意思是:选择性2.insertSelective--选择性保存数据:比如User里面有三个字段:id,name,age,password但是我只设置了一个字段:User u=n ...
- shiro中SSL
对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.keystore 使用JDK的keyt ...
- http.cof
## This is the main Apache HTTP server configuration file. It contains the# configuration directives ...
- js动态检测加载 JQ
var jqcdnurl = 'https://cdn.bootcss.com/jquery/3.2.1/jquery.js'; //控制台输出 function log() { for (var i ...
- 使用SetInterval时函数不能传参问题
无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下:例如对于函 ...
- HashTable Queue Stack SortedList BitArray
HashTable 由于是非泛型集合,因此存储进去的都是object类型,不管是键还是值. Hashtable不允许排序 key不允许重复 键不允许为null Queue和Queue<T> ...
- oracle坏块处理记录
1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...
- WDA基础九:BusinessGraphics
好像很少有人用这玩意...好难玩,好废...和ABAP的那个图一样废.... 很多报表都是用BO,BI什么做的,不仅废,而且很多BO顾问不懂代码,写出来的报表挫的要死.... WDA的网页图形报表分析 ...