201521123039 《java程序设计》第八周学习总结
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的时候,编译器是无法准确知晓的。
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]
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程序设计》第八周学习总结的更多相关文章
- 201521123027 <java程序设计>第八周学习总结
1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
随机推荐
- HDU 2094解题报告
刚学完set,准备做个简单题目实践一下.结果半天都WA. 下面指出WA原因. 方法是这样的,把所有输的赢的都插入a1,输的插入a2: 那么如果最后name1-name2=1,则说明只有他没输过,能判断 ...
- springMVC修改用户请求内容
最近在做一个微信相关的网站,很多地方涉及到微信表情的输入,导致内容无法插入到数据库,虽然有用到一个表情过滤的工具类,但是需要过滤的地方比较多,于是想到在过滤器中过滤用户请求的内容. request这个 ...
- WPF中使用Data Annotations验证Model
.NET Framework中System.ComponentModel.DataAnnotations提供了很多属性来验证对象的属性.可以在C:\Program Files (x86)\Refere ...
- Linux操作系统-安装JAVA
首先准备好jdk文件(例如:本地已下载了jdk-6u33-linux-x64.bin),将它上传到路径 “/home/username/” 这个目录的下面 其次按步骤执行: 1.进入到 “/home/ ...
- 使用pg_upgrade工具为PostgreSQL进行版本升级
公司的测试环境和生产环境都是9.2.4版本,而开发环境是9.0.18版本. PS: 不知道公司里的其它同事,是如何做数据库迁移的,利用第三方可视化工具备份数据库,然后恢复到其它高版本的环境?反正我没成 ...
- Vue过渡效果之CSS过渡
前面的话 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.本文将从CSS过渡transition.CSS动画animation及配合使用第三方CSS动画库(如animate. ...
- 设计模式的征途—20.备忘录(Memento)模式
相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生.为了不让自己后悔,我们总是需要三思而后行.这里我们 ...
- navicat for mysql只导出数据表结构(转)
选中需要导出表结构的数据库,右键,在显示的菜单中选择"数据传输"这一项 ,在弹出窗口中"数据传输"单击选择"高级"一项,在"高级& ...
- C语言指针(三)指针传递给函数
实例1:传递一个无符号的long型指针给该函数 #include<stdio.h>#include<time.h>void getSeconds(unsignedlong*pa ...
- [js高手之路]面向对象+设计模式+继承一步步改造简单的四则运算
到目前为止,我已经写完了面向对象完整的一个系列知识,前面基本属于理论,原理的理解,接下来,我们就用学到的知识来实战下吧. 看看理解原理和理论是否重要?例子从简单到复杂 一.单体(字面量)封装加减乘除 ...