1. 本周学习总结

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

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

  • 遍历Map的方法:
for(Map.Entry<String, ArrayList<Integer>> entry:map.entrySet())System.out.println(entry.getKey()+"="+entry.getValue());
  • forEach循环遍历的方法:
for(E element : 某个Collection集合){do sth with Collection;
}
  • Map 转为List的方法:
List<Entry<String,Integer>> list = new ArrayList<Entry<String,Integer>>(amount.entrySet());
  • 过滤方法:
integerList.stream().filter(Lambda表达式).collect(Collector.toList()).forEach(System.out::println);
  • 返回给定Collection的最大值方法:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll){return Collections.max(coll);
}

2. 书面作业

本次作业题集集合

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

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

实验总结:

  • 表示单个或者多个空格的方法有String [] arr = line.split(" +"); String []arr=line.split("\\s+"); \s是在split正则表达式中匹配任何空白字符。
  • 该实验还让我学会了多种删除List中元素的方法,详见如下截图。

以下是采用迭代器删除列表元素和利用列表本身具有的remove方法删除元素。

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

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

  • 用HashMap实现每个单词与其数量的映射。
  • 将HashMap转为List
  • 重写Collections类中的sort方法实现对List的排序。

2.2.2 实验总结

  • HashMap中的一些基本方法,hashmap.contains(Key)判断映射中是否已经包含此键 hashmap.get(K)得到键所对应的值 hashmap.size()此映射中包含几条键值对
  • 将HashMap转为List List<Entry<String,Integer>> list = new ArrayList<Entry<String,Integer>>(amount.entrySet());
  • 重写Collections类中的sort方法
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {    if(o1.getValue()==o2.getValue())return o1.getKey().compareTo(o2.getKey());else return (o2.getValue() - o1.getValue());}  }); 

2.3 倒排索引(题集题目)

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

2.3.1 截图你的代码运行结果


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

  • 使用HashMap实现单词与位置的映射。显然键为String型,值为ArrayList<Integer>
  • 将HashMap转为List并且输出。(之前的做法,学习了Map的遍历方法后我们可以遍历map来输出键值对)
  • 查找条目:如果输入一个单词则直接根据Key查找Value输出;如果输入多个单词的话先找到单词公共出现的位置,然后将公共位置输出。
  • 在实现第一步的时候就将每一行的内容添加到一个数组中,方便最后根据位置再输出句子。

2.3.3 实验总结

  • 实验还得考虑一种情况,那就是如果一个句子中重复出现一个单词的情况。所以得判断值数组中是否已经包含该行数。
  • 将HashMap转为List方法同上一题。遍历map方法如下:
for(Map.Entry<String, ArrayList<Integer>> entry:map.entrySet())System.out.println(entry.getKey()+"="+entry.getValue());
  • 得到多个单词的公共位置,可以以第一个单词的值数组为基础,然后如果其他值数组中不包含某一个就将其remove。最后如果基础数组空了就输出found 0 results

2.4 Stream与Lambda

编写一个Student类,属性为:

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

创建一集合对象,如List,内有若干Student对象用于后面的测试。

2.4.1 使用传统方法编写一个搜索方法List search(Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)

以下是使用传统方法将ID>201621123065,姓名为Jintianting,age>3,参加过ACM的女性筛选出来并且输出



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

该题先通过stream()变成流,用filter()过滤,留下符合要求的对象,collect()收集留下的元素,可以以List的方式展示。该题添加null之后会报错说是空指针异常,因为Lambda表达式中调用方法的对象可能为空,那解决这个问题的方法可以是加限定条件,也可以是通过try-catch捕获异常,但是捕获异常优缺点。详见下。

collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式。可以是List,也可以使Set等等。



2.5 泛型类:GeneralStack

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

2.5.1 GeneralStack接口的代码

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

  • 之前作业中ArrayListIntegerStack类中的栈只能存放Integer类型的元素,使用泛型之后栈不在限定为只能存放某种类型的元素。
  • 泛型可以避免不安全的强制类型转换,因为栈中的元素类型是自己指定的。
  • 使用泛型之后编译阶段就会对类型进行检查,不会在运行时才报错。

2.6. 选做:泛型方法

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

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

String ,Integer类型已经实现自比较的Comparable接口

max(Collection<? extends T>) 方法用于返回给定collection的最大元素,根据其元素的自然顺序。
声明
以下是java.util.Collections.max()方法的声明。
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
参数
coll-- 其最大元素的集合
返回值
方法调用返回给定collection的最大元素,根据其元素的自然顺序。
异常
ClassCastException--这被抛出,如果集合中包含不可相互比较的(例如,字符串和整数)个元素。
NoSuchElementException--如果集合是空的,抛出此异常。

下面的例子显示java.util.Collections.max()方法的使用

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

不是很理解这道题要做啥,上题可以实现Integer 和String类型的最大值输出已经使用到泛型,那这题沿用上题的max方法显然也可以实现。其次因为父类实现了Comparable接口,其中的Comparable To方法实现的是将User按照年龄从小到大排序,那么调用max方法后将输出年龄最大的StuUser。另外所有的类is a Object,Object user = max(stuList)也可以运行成功。如果User user = max1(stuList);这句是想输出User,那将StuUser里面的toString方法注释掉就好了。



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

方法代码:

测试数据:

运行结果:

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

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

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

  • HashSet存储词表。
  • 循环遍历句子,过程如下:
  • 如果遍历完句子都没有找到一个集中的词,则说明该词不存在,直接输出该字符就好。

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

有部分没实现,词表中包含命和生命,逆向的话先得到命,这一点还没想清楚。



3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

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

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。
自己的目标能实现吗?

周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 939 939 17 17
7 1809 870 28 11
8 2713 904 33 5
9 3153 440 43 10
10 3665 512 50 7

3.4 评估自己对Java的理解程度

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

维度 程度
语法 PTA的题目可以自行完成,不会就百度,写完只是时间问题
面向对象设计能力 需要时间思考如何根据问题设计合适的模型
应用能力 还未尝试编写小工具,如果只是图形界面的话我觉得还行
至今为止代码行数 3665

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

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

  • 先整合一张规范的文件。
  • JAVA导入POI的jar包。进行一些基本的设置。
  • 读取文件,遇到“,”就移至下一个单元格,遇到回车就移至下一行。
  • 获取除首行外的每一列内容添加至一个List中,统计某个题目的数量,除以List的长度得到该题目的不懂率。

    规范文本:

(其实在文本文件中使用tab键和回车键就好,之后将文本文件复制在excel中就会实现自动换行换列,统计不懂率应该在Excel中也是可以操作的)

转载于:https://www.cnblogs.com/21-T/p/7827720.html

作业09-集合与泛型相关推荐

  1. 【Java6】Date类/Calendar类,System类/Math类,包装类,集合,泛型,内部类

    文章目录 1.Date类:getTime(),SimpleDateFormat 2.Calendar类:只有子类对象才能向上转型 3.System类:System.exit(0) 4.Math类:ce ...

  2. 4_常用类_集合_泛型

    JavaSE_第四周 包装类 基本类型 包装类类型(引用类型:默认值都是null) byte Byte short Short int Integer long Long float Float do ...

  3. Java基础巩固(一)类,接口,枚举,常用API,集合,泛型,正则,数据结构

    一.static.final.权限关键字,代码块,接口,枚举 1 关键字 2 代码块 3 接口 4 枚举 idea快捷键 shift + enter 换行 ctrl + Alt + shift + U ...

  4. 泛型集合 有序泛型 c#

    导入命名空间 using System.Collections.Generic; 定义有序集合 // 有序泛型List<String> strList = new List<stri ...

  5. Java集合之Collection集合、泛型 【集合综合案例:赌神、赌侠、赌神斗地主】

    第一章. Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. ...

  6. 14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)

    本篇主要是集合框架基础和List集合,Map集合等等后续更 集合 14.1 集合框架 14.1.1 概念 14.1.2 集合架构 14.2 Collection接口 14.2.1 常用方法 14.3 ...

  7. Java高级-Lambda 表达式、异常处理、集合、泛型、List集合、Map集合、Collections类

    目录 Lambda 表达式 Java Lambda 表达式的优缺点 异常处理 Exception 处理及常见异常 try catch语句 try catch finally语句 throws 声明异常 ...

  8. 什么是泛型以及在集合中泛型的使用

    什么是泛型? 泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的.如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性 ...

  9. 【什么是泛型?集合使用泛型有什么优点?】

    什么是泛型? JDK 1.5开始引入泛型,泛型可以为集合指定元素类型,添加不符合的元素类型则会编译报错. Java中泛型中的T ,R ,K ,V ,E 是什么? public <R> 0b ...

最新文章

  1. 【C语言刷题】交换两个变量(包含不创建临时变量)的解法
  2. 拼接(  read----contigs)和组装(contigs---Scaffolds)
  3. Flutter入门二——项目结构及配置文件简介
  4. [Erlang-0011][OTP] External Term Format
  5. 知识点小记之转义字符
  6. HTML5之内嵌框架
  7. 大数据WEB阶段 shiro安全控制框架
  8. linux用的那国语言,在linux上可以使用什么变成语言
  9. 螺丝孔槽中的螺丝拧花了的物理原理分析
  10. 字符串的各种格式转换,C#中自动为数字千位数,百万位数添加逗号
  11. 思科 接入点 本地转发_思科路由器配置 IPv6 和 OSPFv3 路由
  12. 黑莓7290使用技巧-转载
  13. 激活windows 2008 r2
  14. Latex自由设置虚线的作用区间及间距
  15. 为什么程序员喜欢养猫?
  16. HTML5——HTML5元素周期表
  17. Redis的各种用途以及使用场景
  18. 组态王虚拟服务器,组态王客户端服务器是什么
  19. 基于springboot的小区社区物业管理系统
  20. CPC认证是什么?儿童玩具CPC认证

热门文章

  1. springboot redis 断线重连_Redis复制:部分同步PSYNC详解
  2. 课时 25:Kubernetes 网络模型进阶(叶磊)
  3. 深度 | 容器规模化落地企业的最佳途径
  4. 从零开始入门 K8s | 理解容器运行时接口 CRI
  5. 简易mysql优化_优化 MySQL:简单三个技巧
  6. 计算机专业技能知识,2017年度计算机专业技能知识资料基础知识资料试题'及其答案...
  7. java访问控制度_菜鸡的Java笔记 - java 访问控制权限
  8. html相同数据合并单元格合并单元格,基于JQuery实现相同内容合并单元格的代码...
  9. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析
  10. Python:tkinter滚动抽奖器