1. 本章学习总结


2. 书面作业

Q1.List中指定元素的删除(题目4-1)
 1.1 实验总结

while(list.contains(str))list.remove(str);


 
Q2.统计文字中的单词数量并按出现次数排序(题目5-3)
 2.1 伪代码(简单写出大体步骤)

ArrayList<Map.Entry<String,Integer>> wordlist=new ArrayList<Map.Entry<String,Integer>>(mapword.entrySet());Collections.sort(wordlist,(o1,o2)->{if(o1.getValue()!=o2.getValue()){return o2.getValue()-o1.getValue();}else return o1.getKey().compareTo(o2.getKey());});  

 2.2 实验总结

  • 使用HashMap,先将单词存入ArrayList<Map.Entry<String,Integer>> wordlist,在编写lambd表达式进行排序(跟之前编写name、age排序类似)。或者使用TreeMap因为其已经排序了,所以只要再对value进行排序。

 
Q3.倒排索引(题目5-4)
 3.1 截图你的提交结果(出现学号)

 3.2 伪代码(简单写出大体步骤) 

            //建立索引map.put(linenum, str);//将每行句子存起来Scanner str1=new Scanner(str);while(str1.hasNext()){String word=str1.next();if(!mapword.containsKey(word)){//如果不存在word,则linenum添加到set中,并put到mapwordTreeSet<Integer> set=new TreeSet<Integer>();set.add(linenum);mapword.put(word, set);}else{//存在,则在值集合中add新的一行mapword.get(word).add(linenum);}}linenum++;//下一行//查找,主要判断单词是否存在mapword中或者是否出现交集,如果没有则获取单词对应的行TreeSet<Integer> set=new TreeSet<Integer>();if (!mapword.containsKey(strarr[j])||set.retainAll(mapword.get(strarr[j]))) {break;} else {set=mapword.get(strarr[j]);}if(set.isEmpty()){System.out.println("found 0 results");}else{System.out.println(set);for(Integer o:set){System.out.println("line "+o+":"+map.get(o));//根据行,找到相应句子}}

 3.3 实验总结

  • 两个map,TreeMap<String,TreeSet<Integer>>Map<Integer,String>map,一个是单词到行的映射,一个是行到句子的映射。
  • 这题主要是查找比较难写,本来是跟建索引一样用扫描器的方式获取word,然后对其进行判断word是否存在mapword中或者是否出现交集,如果没有则获取单词对应的行。但是输出结果虽然一样,但是再PTA中提交显示是错误的,后面听同学的方法用split获取就可以了。

    Scanner str1=new Scanner(str);while(str1.hasNext()){String word=str1.next();if (!mapword.containsKey(word)||set.retainAll(mapword.get(word))) {break;} else {set=mapword.get(word);}}

Q4.Stream与Lambda编写一个Student类,属性为:

private Long id;
private String name;
private int age;
private Gender gender;//枚举类型
private boolean joinsACM; //是否参加过ACM比赛

 4.1 使用传统方法编写一个方法,将id>10,name为zhang, age>20, gender为女,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。

public static void main(String[] args) {ArrayList<Student> list=new ArrayList<Student>();list.add(new Student(11L,"zhang",21,Gender.female,true));list.add(new Student(9L,"li",21,Gender.male,true));list.add(new Student(22L,"wang",51,Gender.male,true));list.add(new Student(45L,"zhang",25,Gender.female,true));ArrayList<Student> list1 = new ArrayList<Student>();for (Student student : list) {if (student.getId() > 10L && student.getName().equals("zhang") && student.getAge() > 20 && student.getGender().equals(Gender.female) && student.isJoinsACM()) {list1.add(student);System.out.println(student);} }}
  • 截图如下:

 4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的函数,并测试。

ArrayList<Student> list1 = (ArrayList<Student>) list.Stream().filter(student -> (student.getId() > 10L && student.getName().equals("zhang")&& student.getAge() > 20 && student.getGender().equals(Gender.female)&& student.isJoinsACM())).collect(Collectors.toList());System.out.println(list1);
  • 截图如下:

 4.3 构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,然后重新改写4.2,使其不出现异常。

ArrayList<Student> list1 = (ArrayList<Student>) list.lStream().filter(student -> student != null && (student.getId() > 10L && student.getName().equals("zhang")&& student.getAge() > 20 && student.getGender().equals(Gender.female)&& student.isJoinsACM())).collect(Collectors.toList());
  • 截图如下:

Q5.泛型类:GeneralStack(题目5-5)

 5.1 截图你的提交结果(出现学号)

 5.2 GeneralStack接口的代码

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

 5.3 结合本题,说明泛型有什么好处

  • 泛型允许指定集合中元素的类型,在之前的实验中我们只能建StringStack或者IntegerStack等已经确定类型的栈,在我们需要使用多种类型栈的时候就会出现大量代码,所以可以通过将栈泛型化,可以直接创建多个不同类型的栈,减少了代码量,同时减少了很多强制转化,避免更多出错的可能。

Q6.6.泛型方法 基础参考文件GenericMain,在此文件上进行修改。
 6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中strList为List类型。也能使得Integer maxInt = max(intList);运行成功,其中intList为List类型。

public class GenericMain {public static void main(String[] args) {List<String>strList=new ArrayList<String>();List<Integer>intList=new ArrayList<Integer>();strList.add("fds");strList.add("fda"); strList.add("f12");intList.add(33); intList.add(25); intList.add(62);String max = max(strList);Integer maxInt = max(intList);System.out.println("String max="+max+"  "+"Integer max="+maxInt);}public static <T extends Comparable<T>> T max(List<T> list){T max=list.get(0);for (int i = 0; i < list.size(); i++) {if(list.get(i).compareTo(max)>0){max=list.get(i);}}return max;}
}
  • 截图如下:

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

public class GenericMain {public static void main(String[] args) {List<StuUser>stuList=new ArrayList<StuUser>();stuList.add(new StuUser(12,"11"));stuList.add(new StuUser(32,"12"));stuList.add(new StuUser(33,"13"));System.out.println("max="+max1(stuList));}public static <StuUser extends Comparable<T>> StuUser max1(List<StuUser> list){                     StuUser max=list.get(0);for (int i = 0; i < list.size(); i++) {if(list.get(i).compareTo(max)>0){max=list.get(i);}}return max;}
}
  • 截图如下:

3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

3.2PTA实验

转载于:https://www.cnblogs.com/xygeqian/p/6701664.html

201521123013 《Java程序设计》第8周学习总结相关推荐

  1. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

  2. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  3. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

  4. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

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

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  7. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  8. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  9. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  10. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

最新文章

  1. VS Code 成主宰、Vue 备受热捧!2019 前端开发趋势必读
  2. excel宏病毒专杀方法
  3. 图灵机器人调用数据恢复_机器人也能撩妹?python程序员自制微信机器人,替他俘获女神芳心...
  4. ExtJS中的Grid分页
  5. POJ 3928 amp; HDU 2492 Ping pong(树阵评价倒数)
  6. android 底部导航总结
  7. 进击的融合,浪潮推出全新SAS Switch储存设备SF-S1
  8. python之输出语句
  9. Altium designer--DB接口DB9/DB15/DB25/DB37/DB50
  10. java获取东八区时间
  11. WebDAV之葫芦儿·派盘 + CloudBeats
  12. mysql 空闲链接超时时间_解决mysql 中共8小时空闲后连接超时的有关问题
  13. obsidian vim模式切换输入法
  14. 【Lesson 12】中古风五声音阶——和弦使用技巧
  15. [EOS源码分析]7.EOS智能合约开发实践之合约调用合约(inline action)
  16. Unity的Socket网络编程
  17. 数据库学习笔记04——关系数据库2
  18. Ab3d.Reader3ds - 3ds 文件导入器 --FIX-Crack
  19. iOS开发学无止境 - Cell 里的视图控制器
  20. 汇顶数字设计验证笔试题

热门文章

  1. [Usaco2008 Feb]Eating Together麻烦的聚餐[最长不下降子序列]
  2. 在碎片化阅读充斥眼球的时代,要高效读论文
  3. 不容错过!大咖坐镇直播间,分享主题:智能几何计算
  4. 支持中国西安申办ICCV2025,见证计算机视觉蓬勃发展的20年 | Vote for ICCV2025 Xi'an China...
  5. 【项目合作】瓷砖表面打印缺陷识别
  6. debian10树莓派4安装mysql_树莓派 4 发布!新 OS 基于 Debian 10 Buster
  7. 【Java】京东面试:说说MySQL的架构体系
  8. python 字符串操作list【:-1】的几种用法
  9. 重磅!深度学习的顶级会议ICLR 2020 数据图文详解
  10. linux重装lnmp,基于CentOS 6.5的LNMP安装过程