201521123038 《Java程序设计》 第八周学习总结


1. 本周学习总结

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

  • 从集合里面获取对象时必须进行强制类型转换,例:String str = (String)strList.get(0);

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

for (Entry<String, Set<Integer>> a : words.entrySet())
System.out.println(a);
  • 写的更简洁一点

2. 书面作业

1.List中指定元素的删除

题集jmu-Java-05-集合之4-1

1.1 实验总结

  • 进行删除操作的时候最好从末尾开始删除。如果从开头开始删除会改变后方元素的下标,在下一次删除前要将后方元素前移,代码量大。

2.统计文字中的单词数量并按出现次数排序

题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序

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

		Map<String,Integer>words=new HashMap<String,Integer>();

		while(input.hasNext())
{
s=input.next();
if(s.equals("!!!!!")) break;
//如果words包含该元素,取出它的计数器并加1,否则计数器为1;将该元素和计数放入集合
} ... ... List<Entry<String,Integer>> list =new ArrayList<Entry<String,Integer>>(words.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
... ...
//按次数排序
}); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
... ...
//次数相同按字母排序
}); System.out.print()//按要求输出

2.2 实验总结

  • 对map进行排序前要将其转化成ArrayList,才能调用Collections进行排序

  • 用Collections.sort和匿名类对内容进行排序

3.倒排索引

题集jmu-Java-05-集合之5-4

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

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

	TreeMap<String,Set<Integer>>  words = new TreeMap<String,Set<Integer>>();

	while(input.hasNextLine())
{
str=input.nextLine();
if(str.compareTo("!!!!!")==0) break;
s1[]=str.split(" ");
for(int i=0;i<s1.length;i++)
{
... ...
//如果words包含该元素,取出value并添加行数,否则value为该行行数;将该元素和value放入集合
lcount++;//行数加一
}
} ... ...//输出集合 while(input.hasNextLine())
{
... ...
for(int i=0;i<总行数;i++)
{
... ...
//判断该行是否包含输入字符串中的所有单词,包含则计数集合中添加行数
}
if(计数集合为空) System.out.println("found 0 results");
else ... ...//输出行数和对应行内容 }

3.3 实验总结

  • 用TreeMap定义集合,key会直接在内部进行排序
  • 将value用Set定义可以预防一个行里重复出现某个单词时重复添加的情况。用ArrayList则要考虑是否有重复现象代码量太多。
  • 将TreeMap转List之后可以直接输出转后元素,会自动按特定格式输出

4.Stream与Lambda

编写一个Student类,属性为:

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

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

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

	for(int i=0;i<6;i++)
{
k=list.get(i);
if(k.getId()>10&&k.getName().equals("zhang")&&k.getAge()>20&&k.getGender()==Gender.女&&k.isJoinsACM())
nlist.add(k);
}

为方便验证,list中的元素在代码中直接赋值

测试结果:

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

	List<Student> nlist=(List<Student>) list.stream().filter(k->k.getId()>10&&k.getName().equals("zhang")&&k.getAge()>20&&k.getGender()==Gender.女&&k.isJoinsACM()).collect(Collectors.toList());

测试结果:

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

	List<Student> nlist=(List<Student>) list.stream().filter(k->k!=null&&k.getId()>10&&k.getName().equals("zhang")&&k.getAge()>20&&k.getGender()==Gender.女&&k.isJoinsACM()).collect(Collectors.toList());

只需要加入判断元素是否为空

测试结果:

5.泛型类:GeneralStack

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

(分别用泛型和Object编写)

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 结合本题,说明泛型有什么好处

  • 使用泛型则不需要考虑参数的类型。可以在一个集合里面存放多种类型的数据。拿stack举例,按照普通的方法要对每个类型的栈都要重写相应的方法,代码量大。用泛型则不需要考虑入栈元素的类型。

  • 用两种方法写了这道题,把接口方法类型改为Object也是可以通过PTA测试。但是两者还是有区别的:Java中的Object、T(泛型)、?区别

6.泛型方法

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

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

private static <T> T max(List<T> list) {
Collections.sort(list,new Comparator<T>()
{
@Override
public int compare(T o1, T o2) { return o1.toString().compareTo(o2.toString());
}
}
);
return list.get(list.size()-1);
}
  • 用Collections.max:


	public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
{
return Collections.max(coll);
}

运行结果:

  • 最开始的时候用简单的泛型,因为只有String和Integer类型就直接将元素转换成String类再进行比较,但是如果是其他类型运行就会出错。
  • Collections自带求max的方法,用起来比较方便
  • 参考链接:java.util.Collections.max()方法实例

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

  • 用原来的max,只能将age最大的输出

  • 输出no最大的元素
	private static StuUser max1(List<StuUser> stuList, StuUserComparator stuUserComparator) {
StuUser max=stuList.get(0);
for(StuUser e:stuList)
{
if(e.getNo().compareTo(max.getNo())>0) max=e;
}
return max;
}

运行结果:

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

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

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

7.1 写出伪代码即可

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

8.选做:JavaFX入门

完成其中的作业1、作业2。内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。

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

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

3.1. 码云代码提交记录

201521123038 《Java程序设计》 第八周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第八周学习总结

    1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...

  2. 201521123038 《Java程序设计》 第二周学习总结

    201521123038 <Java程序设计> 第二周学习总结 1.本章学习总结 学会在Java程序中使用函数,使程序层次更清晰 使用StringBuilder编写代码,减少内存空间的占用 ...

  3. 201521123038 《Java程序设计》 第一周学习总结

    201521123038 <Java程序设计> 第一周学习总结 1.本章学习总结 本周已掌握Java配置,初步认识Java运行软件和基本语法. Java语言语法和C语言基本类似,部分不同. ...

  4. 201521123038 《Java程序设计》 第九周学习总结

    201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...

  5. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  6. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  7. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  8. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  9. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

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

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

随机推荐

  1. .NET Core资源汇总

    前言 首先庆祝.NET Core 2.0今天发布. 最近一两年.NET的关注度直线下降, 大部分开发人员转去了其他平台, 国内的机会也越来越少了. 行情虽然如此, 仍在坚守.NET平台的开发人员还是要 ...

  2. 【学习笔记】深入理解超时调用(setTimeout)和间歇调用(setInterval)

    超时调用(setTimeout):在指定的毫秒数后调用函数或计算表达式. setTimeout(func, 1000); // func执行的函数,1000毫秒 间歇调用(setInterval):按 ...

  3. 2017多校第10场 HDU 6178 Monkeys 贪心,或者DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6178 题意:给出一棵有n个节点的树,现在需要你把k只猴子放在节点上,每个节点最多放一只猴子,且要求每只 ...

  4. Ubuntu 14.04下Redis安装报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决

    Redis简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  5. ASP.NET Core 2.0使用Cookie认证实现SSO单点登录

    之前写了一个使用ASP.NET MVC实现SSO登录的Demo,https://github.com/bidianqing/SSO.Sample,这个Demo是基于.NET Framework,.NE ...

  6. PHP导出excle图片与文字

    try { //CI框架引入PHPExcel $this->load->library('PHPExcel'); $objPHPExcel = new PHPExcel(); //图片处理 ...

  7. 002-Apache Maven 构建生命周期

    Maven - 构建生命周期 什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分. 举例说明,一个典 ...

  8. 初识SVN-版本控制工具

    慕课网安装教程链接:http://www.imooc.com/video/1924

  9. Keep in Mind

    Do not undermine your worth by comparing yourself with others.It is because we are different and eac ...

  10. NPOI office 组件资料汇总 (excel, word)

    POI 是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 的文件,支持的文件格式包括xls, doc, ppt等. NPOI 是POI的.net 版本. 最新 ...