学号 2017-2018-2 《程序设计与数据结构》第十周学习总结
教材学习内容总结
第13章 集合
- .集合与数据结构: |
1.集合是一种对象,类似于保存其他对象的存储库。
2.集合的同构和异构:同构意味着这种集合保存类型全部相同的对象,异构可以保存各种类型的对象。
3.分离接口和实现:抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合。一个ADT有名称、值域和一组允许执行的操作。对象具有定义良好的接口,从而成为一种实现集合的完整机制。
4.根据对象的定义,对象本身具有定义良好的接口,接口的实现就隐含在类中,表达数据的方式和管理数据的操作都封装在对象中。由于对象与软件系统其他组成部分的交互收到有效控制,因此这种类型的对象可复用并且可靠。
- 数据结构的动态表示: |
1.一个动态数据结构用链来实现,利用对象引用作为连接对象之间的链,就可以建立起适用于各种情况的数据结构。按这种方式建立的数据结构具有动态性,因为其大小是在使用时动态确定的,而不是在声明时静态确定的。
2.动态结构:使同一个类的两个对象建立起关系,用第一个对象的引用变量指向下一个对象,然后再让第二个对象的引用变量指向第三个对象,以此类推,最后建立起一个链表。
3.动态链表的链接:书上的MagazineRack、MagazineList例子很好的阐述了。
4.其他的动态列表:动态列表有许多不同的实现,例如可以用双向链表实现方案,或者以有序的方式实现方案。如果采用一些较复杂的数据结构能够使一些基本的公共操作更为有效,那么维护复杂数据结构所带来的额外开销是值得的。
- 线性数据结构: |
1.线性结构是n个数据元素的有限序列。线性数据结构是顺序表在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。例如:列表、队列、堆栈
2.队列:队列是一种以先进先出方式(FIFO)管理数据的线性数据结构。
3.堆栈:堆栈是一种以后进先出方式(LIFO)管理数据的线性数据结构。
- 非线性数据结构: |
1.有些数据结构以非线性方式组织数据,因而称为非线性数据结构。例如:树和图。
2.树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。根节点在顶层,叶节点在底层。二叉树和树的操作有所不同。
3.图:图没有类似于树根节点那样的初始入口点。在一个图中,一个节点到另一个节点的连接称为边,连接一个图内各节点的边数一般没有限制。
- 异常的传递: |
1.Java集合类API是Java标准类库中的一组类,代表不同类型的集合体,如ArrayList和LinkedList。
2.泛型对象是一种集合类对象,实现泛型对象是为了其管理的对象的类型在某个集合类建立时也被创建,这样就允许编译时能控制一些加入到该集合中的对象的类型,减少这些对象从该集合清除时的类型转换处理。Java集合类API的定义的类为泛型。
教材学习中的问题和解决过程
- 问题1:节点是什么意思。
- 问题1解决方案:
可以说是结构体,节点就是一个带有指针指向的结构体,把相邻的点关联起来,可以把链表想象成火车,节点就是其中一节节的车厢,通过通道和前后车厢相连。节点的具体使用例如:
private Node(String data,Node next){
this.data = data;
this.next = next;
}
private void addToHead(String data){
Node n = new Node(data,null);
n.next = this.head;
this.head = n;
}
上述代码的意思是Node n = new Node(data,null); 一个新进来的节点,没有next。n.next = this.head;新节点的next设置成head 。 this.head = n;把当前节点设置成head 。
- 问题2:API是什么?
- 问题2解决方案:
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
运行Java程序时,虚拟机装载程序的class文件所使用的Java API class文件。所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。 在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API的功能。为访问主机上的本地资源,Java API调用了本地方法。由于Java API class文件调用了本地方法,Java程序就不需要再调用它们了。通过这种方法,Java API class文件为底层主机提供了具有平台无关性、标准接口的Java程序。对Java程序而言,无论平台内部如何,Java API都会有同样的表现和可预测的行为。正是由于在每个特定的主机平台上明确地实现了Java虚拟机和Java API,因此,Java程序自身就能够成为具有平台无关性的程序。
上周考试错题总结
-
第一题:Which of the following is not true of the RuntimeExceptions class?
A .All RuntimeExceptions throw checked exceptions
B .All RuntimeExceptions are Throwable objects
C .RuntimeException has child classes ArithmeticException and NullPointerException
D .RuntimeException objects are not Error objects
E .All of the above are true -
分析:运行时异常是可抛出的对象,并不是错误类的一部分,而两种类型的runtimeexception是算术异常和NullPointerException。不属于运行时异常的异常包括各种检查异常,但运行时异常不被检查异常。
-
第二题:The term "exception propagation" means
A .an exception is caught by the first catch clause
B .an exception not caught by the first catch clause is caught by an outer (enclosing) catch clause
C .exceptions are caught, sequentially, by catch clauses in the current try block
D .exceptions always are caught by the outermost try block
E .none of the above -
分析:异常传播意味着一个异常被匹配的catch子句在当前try块级别,如果没有匹配,然后在下一个封闭try块级别,等等,直到异常已经被匹配的条款或异常的主程序和被Java虚拟机。
-
第三题:In order to define a keyboard input object, keyboard, you could use the instruction:
BufferedReader keyboard = new BufferedReader(System.in);
A .true
B .false -
分析:一个BufferedReader对象必须用Reader对象构建。系统。in是一个输入流对象。为了使用上述定义,必须将BufferedReader构造函数中的对象更改为(新的InputStreamReader(System.in))。一份法律声明。
代码托管
点评过的同学博客和代码
- 本周结对学习情况
-
[20172317]
-
结对学习内容
- 教材第11,12章
- 阅读13.1~13.5章节
- 完成课后自测题,并参考答案学习
- 完成课后练习题
- 完成程序设计项目:至少完成PP13.1,PP13.3
-
其他(感悟、思考等,可选)
概念很多,嘚仔细看,有很多细节,和前面的章节联系紧密。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 95/95 | 1/1 | 18/18 | 对代码产生了很大兴趣 |
第二周 | 515/620 | 1/2 | 22/40 | 打字速度明显提升 |
第三周 | 290/910 | 1/3 | 20/60 | 无 |
第四周 | 1741/2651 | 1/4 | 30/84 | 无 |
第五周 | 579/3230 | 1/5 | 20/104 | 了解到预习的重要性 |
第六周 | 599/3829 | 2/8 | 18/122 | 打字速度明显提升 |
第七周 | 732/4561 | 2/9 | 24/146 | 学了使用JUnit,但还是不太会 |
第八周 | 1354/5915 | 2/11 | 30/176 | 无 |
第九周 | 1354/5915 | 2/13 | 25/201 | 不知为啥,代码无缘无故少了300行,我现在很迷 |
第十周 | 696/6611 | 1/14 | 30/231 | 这章学的比较吃力,所以博客没完成好 |
-
计划学习时间:30小时
-
实际学习时间:30小时
-
改进情况:无
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)