1. 本周学习总结

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

总结:
1.集合可以动态修改大小,但是不可以存放基本数据类型;
2.java中任何对象都是is-a Object对象,因此Java的一个集合可以存放任意一种类型的对象,但是需要注意的是从集合里面获取对象的时候必须要进行强制转换;
3.绑定类型可以是一个可表示为T extends 接口A,也可以是多个绑定类型,可表示为T extends 接口A & 接口B;
4.虚拟机不存在泛型类型的信息;
5.对于同一个泛型类,即便所给定的参数类型不同,但是它始终只要一个原型类型
6.使用泛型时应该注意不能使用基本类型,只能使用包装类型,在运行时查询类型时也只可以查询原始类型;
7.泛型无法继承,因为在实现的时候必须为泛型传入类型实参,给定实参后它就是一个具体的类型了,就不再是泛型了
8.使用List<? extends X>这种形式的时候,调用List的add方法会导致编译失败是因为在创建具体实例的时候,可能是使用了X也可能使用了X的子类,而这个信息编译器无法分辨导致出错,而当我们使用List<? super X>这种形式的时候,调用List的get方法会失败。因为我们在创建实例的时候,可能用了X也可能是X的某一个超类,那么当调用get的时候,编译器是无法准确知晓的。

浅谈Java泛型中的extends和super关键字

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

1.下面的代码片段是向list类型集合中加入了一个字符串类型的值和一个Integer类型的值。在之后的循环中,运行时会出现java.lang.ClassCastException异常,这个例子就是为了突出泛型的好处。

List list = new ArrayList();  
list.add("javawangxing");  
list.add(100);  
for (int i = 0; i < list.size(); i++) {  
  String name = (String) list.get(i); //取出Integer时,运行时出现异常  
System.out.println("name:" + name);  

2.编译之后,程序会采取去泛型化的措施,也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,成功编译过后的class文件中是不包含任何泛型信息的,泛型信息不会进入到运行时阶段,代码片段如下:

ArrayList<String> a = new ArrayList<String>();  
a.add("CSDN");  
Class c = a.getClass();  
try{  
    Method method = c.getMethod("add",Object.class);  
    method.invoke(a,100);  
    System.out.println(a);  
}catch(Exception e){  
    e.printStackTrace();  
}

运行结果:

[CSDN, 100]

java 泛型详解


2. 书面作业

List中指定元素的删除

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

1.1 实验总结

总结:在添加元素进列表前要判断其是否为空格,如果是空格就不加入列表,否则结果会出现空格,另外要注意提交的时候不要把main函数提交上去

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


统计文字中的单词数量并按出现次数排序(尽量不要出现代码)

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

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

答:
while(str not equals(!!!!!)){
if(map.containsKey(str)){
map.put(str,n+1);
}
else
map.put(str, 1);
}
sort(map);
out(结果);

2.2 实验总结

总结:在判断一个元素是否要加入映射表时应该判断这个元素在映射表中是否存在,如果存在就在原来的基础上加1,否则加入这个元素然后数量为1,排序时次数相同以后再按照键值排序只需要在compare加一个if-else语句即可。

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


倒排索引(尽量不要出现代码)

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

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

答:
while(line not equals(!!!!!)){
map.put(line,1);
String [] arr=line.spilt(" ");
for(i<arr.length){
if(map.containsKey(arr[i]){
add line;
else
add line and arr[i];
}
change array to list;
if(!list.isEmpty)
out(结果);

3.2 实验总结

总结:本题需要考虑一行出现相同单词的情况,除此之外在查询时要先读入一行,然后再使用split方法后list后进行查询。

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


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中调用,然后输出结果。

public Student screen()
{
if(this.id>10L&&this.name.equals("zhang")&&this.age>20&&this.gender==Gender.女&&this.joinsACM)
{
Student stu=new Student(this.id,this.name,this.age,this.gender,this.joinsACM);
return stu;
} else
return null;
}

运行结果:

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

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

泛型类:GeneralStack

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

5.1 GeneralStack接口的代码

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

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

泛型可以消除代码中强制类型的转换,如果没有泛型那就需要程序员手动强制转换,那么代码可能会抛出ClassCastException。例如本题中GeneralStack接口的实现类的引用类型在运行前并不知道是哪种类型,如果没有泛型那么就要编写一套Integer的代码,一套Double的代码,这样做会使本题增加了一些不必要的代码量。除此之外,使用泛型还会使错误在编译阶段就被发现,便于修改。

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


泛型方法

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

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

public static <T extends Comparable<T>> T max(List<T> list)//max方法
{
T max = list.get(0);
for (int i=1;i<list.size();i++) {
if ( list.get(i).compareTo( max ) > 0 ){
max=list.get(i);
}
}
return max;
}

6.2 选做:编写方法max1,基本功能同6.1,但让其所返回的值可以赋予其父类型变量。如有User类,其子类为StuUser,且均实现了Comparable接口。编写max1使得User user = max1(stuList);可以运行成功,其中stuList为List类型。也可使得Object user = max(stuList)运行成功。

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

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

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

7.1 写出伪代码即可

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

选做:JavaFX入门

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

3.1. 码云代码提交记录

3.2. PTA实验

函数(4-1),编程(5-3,5-4,5-5)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

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

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  10. 20175317 《Java程序设计》第九周学习总结

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. 经纬度坐标数据处理——基于R

    ggmap w=read.csv("LA.Neighborhoods.csv") w=data.frame(w,density=w$Population/w$Area) u=w[, ...

  2. Linux网络配置文件详解

    --Linux网络配置文件详解----------------------2013/10/03 目前在企业级服务器的Linux系统中,RHEL占有绝对的优势,不管是曾经在互联网公司还是在目前测试Vir ...

  3. butterknife的8.5.1版本问题

    使用7.0.1版本没有问题compile 'com.jakewharton:butterknife:7.0.1'使用8.5.0版本时候,必须配合下面的compiler插件一起使用,否则会出现点击事件不 ...

  4. 'IFileDialog' : no GUID has been associated with this object

    在VS2010中使用IFileDialog,提示一下错误: 'IFileDialog' : no GUID has been associated with this object MSDN上明确表示 ...

  5. 如何用CSS和jQuery实现一个侧滑导航菜单

    为了建立导航菜单,让我们先看看html结构:<!DOCTYPE html><html lang="en"><head> <meta cha ...

  6. MySQL的常用SQL语句.md

    修改密码 这是常见的大家一般都要用的 首先     安装成功了打开cmd --> mysql -u root -p -->输入你的密码     修改mysql root用户密码    格式 ...

  7. C#学习——简介(第一天)

    一.控制台输出 在控制台输出: console.writeline(); console.readkey(); 加上后面一句是为了保证弹窗不会一闪而过. 二.注释 1.单行注释: //int a=90 ...

  8. 【踩坑】activiti工作流的svg-xml解析报错

    1.问题记录 工作流配置画模板的时候保存成功但是部署报错. IE下 activiti工作流解析xml报错 type "path" must be followed by eithe ...

  9. spring框架整合hibernate框架简单操作数据库

    1.配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...

  10. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...