20172320 2017-2018-2 《Java程序设计》第十周学习总结
教材学习内容总结
1、集合是一种对象,类似于保存其他对象的存储库
- 集合的同构意味着这种集合保存类型全部相同的对象;异构意味着可以保存各种类型的对象
2、抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合。
- ADT有名称、值域和一组允许执行的操作
- ADT上可以执行的操作与底层的实现分离开了
3、一个动态数据结构用链来实现,动态数据结构的大小规模随需要增长和收缩
4、线性数据结构
- 队列:类似于列表,队列的元素存取方式有限,是一种以先进先出方式管理数据的线性数据结构
- 堆栈:一种以后进先出方式管理数据的线性数据结构
5、非线性数据结构
- 树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。根节点在顶层,叶节点在底层。二叉树和树的操作有所不同
- 图:没有类似于树根节点那样的初始入口点。一个节点到另一个节点的连接称为边,连接一个图内各节点的边数一般没有限制
6、Java集合类API:定义了几种表示不同类型集合的类
- 泛型:Java集合类ARI中的类定义为泛型,指一个集合所管理的对象的类型要在实例化该集合对象时才确定,泛型保证了集合中对象类型的兼容性
教材中遇到的问题和解决过程‘
- 问题1:队列和堆栈?
- 问题1解决方案:
- 队列:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表
(1)允许删除的一端称为队头
(2)允许插入的一端称为队尾
(3)当队列中没有元素时称为空队列
- 堆栈:限制仅在表的一端进行插入和删除运算的线性表
(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈
- 作用:堆栈:1.用于符号匹配
2.用于计算代数式
3.构造表达式
4.用于函数调用
(2、3可以用二叉树来解决)
- 相同点:1.都是线性结构。
2.插入操作都是限定在表尾进行。
3.都可以通过顺序结构和链式结构实现。
4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
5.多链栈和多链队列的管理模式可以相同。
- 不同点:1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。
3.顺序栈能够实现多栈空间共享,而顺序队列不能。
- 问题2:泛型的理解
- 问题2解决方案:
本质:为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中
例子:见参考链接
特性:泛型只在编译阶段有效
使用:- 泛型类:用于类的定义中,通过泛型可以完成对一组类的操作对外开放相同的接口
- 泛型接口:与泛型类的定义及使用基本相同,泛型接口常被用在各种类的生产器中
- 泛型方式
优点:- 把运行时期的问题提前到了编译期间
- 避免了强制类型转换
- 优化了程序设计,解决了黄色警告线问题,让程序更安全
代码调试中的问题和解决过程
上周考试错题总结
- What does the following method compute? Assume the method is called initially with i = 0
public int question9(String a, char b, int i)
{
if (i = = a.length( )) return 0;
else if (b = = a.charAt(i)) return question9(a, b, i+1) + 1;
else return question9(a, b, i+1);
}
A .the length of String a
B .the length of String a concatenated with char b
C .the number of times char b appears in String a
D .returns 1 if char b appears in String a at least once, and 0 otherwise
E .the char which appears at location i in String a
分析:该方法将字符串a中的每个字符与char b进行比较,直到i到达字符串a的长度。1被添加到每个匹配的返回值中。
- A recursive algorithm is superior to an iterative algorithm along which of the following criteria?
A .The recursive algorithm is easier to debug
B .The recursive algorithm is computationally more efficient
C .The recursive algorithm is more elegant
D .The recursive algorithm requires less memory to execute
E .all of the above
分析:为了简单起见,数学通常递归地定义函数
- The difference between direct and indirect recursion is
A .direct recursion occurs when a method invokes itself; indirect recursion occurs when there is an intervening method
B .indirect recursion occurs when a method invokes itself; direct recursion occurs when there is an intervening method
C .direct recursion only occurs with methods declared to be private; indirect recursion can occur with methods declared to be private, protected, or public
D .indirect recursion only occurs with methods declared to be private; direct recursion can occur with methods declared to be private, protected, or public
E .none of the above
分析:直接递归意味着方法直接调用自己,而不使用中介方法。当再次调用原始方法之前有一个或多个中介方法时,就会发生间接递归。
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
20172317
- 结对学习内容
?教材第11,12章
?阅读11.1-11.6、12.1-12.3章节
?完成课后自测题,并参考答案学习
?完成课后练习题
?完成程序设计项目:至少完成PP11.1、PP11.2、PP12.1、PP12.9
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 67/67 | 1/4 | 20/20 | |
第二周 | 328/395 | 1/5 | 20/40 | |
第三周 | 523/851 | 1/6 | 20/60 | |
第四周 | 1070/1921 | 1/7 | 20/80 | |
第五周 | 608/2529 | 1/8 | 10/90 | |
第六周 | 608/2899 | 1/9 | 20/110 | |
第七周 | 429/3328 | 1/10 | 20/130 | |
第八周 | 804/4131 | 1/11 | 20/150 | |
第九周 | 521/4652 | 1/12 | 20/170 | |
第十周 | 600/5252 | 1/13 | 20/190 |
参考资料
原文地址:https://www.cnblogs.com/garolwz/p/9063561.html