学号20172328《程序设计与数据结构》第十周学习总结

学号20172328《程序设计与数据结构》第十周学习总结

教材学习内容总结 (第13章:集合)

  • 1.集合与数据结构:集合是一种对象,类似于保存其他对象的存储库。

    • 集合的同构和异构:同构意味着这种集合保存类型全部相同的对象,异构可以保存各种类型的对象。
    • 分离接口和实现:抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合。一个ADT有名称、值域和一组允许执行的操作。对象具有定义良好的接口,从而成为一种实现集合的完整机制。
    • 根据对象的定义,对象本身具有定义良好的接口,接口的实现就隐含在类中,表达数据的方式和管理数据的操作都封装在对象中。由于对象与软件系统其他组成部分的交互收到有效控制,因此这种类型的对象可复用并且可靠
  • 2.数据结构的动态表示:一个动态数据结构用链来实现,利用对象引用作为连接对象之间的链,就可以建立起适用于各种情况的数据结构。按这种方式建立的数据结构具有动态性,因为其大小是在使用时动态确定的,而不是在声明时静态确定的。

    • 动态结构:使同一个类的两个对象建立起关系,用第一个对象的引用变量指向下一个对象,然后再让第二个对象的引用变量指向第三个对象,以此类推,最后建立起一个链表。
    • 动态链表的链接:书上的MagazineRack、MagazineList例子很好的阐述了。
    • 其他的动态列表:动态列表有许多不同的实现,例如可以用双向链表实现方案,或者以有序的方式实现方案。如果采用一些较复杂的数据结构能够使一些基本的公共操作更为有效,那么维护复杂数据结构所带来的额外开销是值得的。
  • 3.线性数据结构:线性结构是n个数据元素的有限序列。线性数据结构是顺序表在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。例如:列表、队列、堆栈

    • 队列:队列是一种以先进先出方式(FIFO)管理数据的线性数据结构。
    • 堆栈:堆栈是一种以后进先出方式(LIFO)管理数据的线性数据结构。
  • 4.非线性数据结构:有些数据结构以非线性方式组织数据,因而称为非线性数据结构。例如:树和图。

    • 树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。根节点在顶层,叶节点在底层。二叉树和树的操作有所不同。
    • 图:图没有类似于树根节点那样的初始入口点。在一个图中,一个节点到另一个节点的连接称为边,连接一个图内各节点的边数一般没有限制。
  • 5.Java集合类API:Java集合类API是Java标准类库中的一组类,代表不同类型的集合体,如ArrayList和LinkedList。

  • 泛型对象是一种集合类对象,实现泛型对象是为了其管理的对象的类型在某个集合类建立时也被创建,这样就允许编译时能控制一些加入到该集合中的对象的类型,减少这些对象从该集合清除时的类型转换处理。Java集合类API的定义的类为泛型。

教材学习中的问题和解决过程

  • 问题1:在学习堆栈过程中,不理解:

与Stack类不同的是,在JavaAPI中没有实现队列的类。

是什么意思?

  • 1.(〃'▽'〃)本题解答:
    • 首先我先去找了找javaAPI到底是什么?

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

运行Java程序时,虚拟机装载程序的class文件所使用的Java API class文件。所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。

  • 然后再去了解一下队列的使用:

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。Queue接口与List、Set同一级别,都是继承了Collection接口。

- javaAPI中没有实现队列的类,所以只能通过Queue接口来实现队列。
  • 问题2:如果要将基本类型的数据压入堆栈,则必须先用相应的包装类将数据封装为对象?
  • 2.(〃'▽'〃)本题解答:Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

代码调试中的问题和解决过程

  • 问题1:在做pp13.3时不知道如何设置节点用来排序。

  • 1.(〃'▽'〃)本题解答:重新看书去理解。在编写的时候需要一个Node类(类中类)来充当结点的模型。我们知道,Node类有两个属性,一是存放数据的data,二是存放下一结点的引用。list是最开始的一段内容,如果要实现一些方法,就可以使用节点使链表形成动态结构。

  • 问题2:在实现过程中遇到的问题。

  • 2.(〃'▽'〃)本题解答:
    这个问题是我代码中指向的问题,应该是属于逻辑不清晰的原因。我不知道该如何表述错误及其原因。等我真正学会后再来补这里的博客吧。(;へ:)
    2018年5月24日晚上0:21凌晨补博客啦,我终于基本明白了。在指向的时候,前一个节点要指向后一个节点,后一个节点不能为空。当被指向为空时,就会报错。

代码托管

上周考试错题总结

  • 问题1: A Java program can handle an exception in several different ways. Which of the following is not a way that a Java program could handle an exception?(Java程序可以以几种不同的方法处理异常。下列哪一种不是Java程序能够处理异常的方法?)
    A . ignore the exception(忽略异常)
    B . handle the exception where it arose using try and catch statemen(使用try和catch语句处理异常)
    C . propagate the exception to another method where it can be handled(将异常传递到可以进行处理的另一种方法里面)
    D . throw the exception to a pre-defined Exception class to be handled(将异常抛出为一个预先定义的异常类)
    E . all of the above are ways that a Java program could handle an exception(以上所有这些都是Java程序可以处理异常的方法)
  • 问题1分析和领悟:正确答案是D,而我选的是与之相去甚远的E。我以为这些方法都可以处理异常,然而,异常不会被抛出异常类。处理异常只有三种方法,根本不处理异常,当异常发生时处理异常,在程序的某个位置集中处理异常。所以,将问题抛出为一个预先定义的异常类是不可能实现的。
  • 问题2:An exception can produce a "call stack trace" which lists(一个异常可以产生一个“调用堆栈跟踪”,关于调用堆栈踪迹下面有以下说法)
    A . the active methods in the order that they were invoked(顺序排列被调用的方法)
    B . the active methods in the opposite order that they were invoked(以相反的顺序排列出调用的方法)
    C . the values of all instance data of the object where the exception was raised(异常被提出的对象的所有实例数据的值)
    D . the values of all instance data of the object where the exception was raised and all local variables and parameters of the method where the exception was raised(在提出异常的对象的所有实例数据的值以及所提出异常的方法的所有局部变量和参数)
    E . the name of the exception thrown(抛出异常的名称)
  • 问题2分析和领悟:正确答案选B,我选了A,调用堆栈跟踪提供了储存在运行时堆栈中的方法的名称。方法名称从堆栈中删除并以相反的顺序放置。也就是说,最早的方法是先放在这里,下一个方法其次,等等,所以最近调用的方法是在堆栈上最后一项。堆栈跟踪然后以相反的顺序显示所有异常调用的方法。
  • 问题3:An exception that could also arise in the try statement that does not have an associated catch statement is(try-catch语句中没有catch子句也可能出现的异常是)
    A . ClassNotFoundException
    B . IllegalArgumentException
    C . NegativeArraySizeException
    D . NullPointException
    E . OutOfMemoryException
  • 问题3分析和领悟:正确答案选D,我选了B,这道题是不会做不会做不会做 NullPointerException是Java语言中的一个异常类,位于java.lang包中,父类是java.lang.RuntimeException,该异常在源程序中可以不进行捕获和处理。ClassNotFoundException、非法参数异常和OutOfMemoryException将不会被抛出,因为try语句中没有任何代码,它们要么调用某个未知的类,要么使用一个参数,要么处理新内存的生成。只有当实例化一个数组时,才会出现NegativeArraySizeException。关于NullPointException的详细解释
  • 问题4: The idea that an object can exist separate from the executing program that creates it is called(一个对象可以单独于产生它的执行程序的想法被称为)
    A . transience(短暂)
    B . static(静态)
    C . persistence(持久性)
    D . serialization(序列化)
    E . finality(最后的事物)
  • 问题4分析和领悟:正确答案选C,我选了E。对象存储在内存中,当对象不再被引用时,它们会被垃圾收集器回收。当Java程序终止时,没有引用对象,因此所有对象都被回收。然而,为了将来的使用,能够保存任何给定的对象是可取的。这种特性称为持久性,它的功能是将对象的实例数据保存到文件中。这可以通过将每个实例数据写入数据文件来完成,但是使用对象序列化简化了。
  • 问题5: A processing stream is a data stream that(一个处理流数据流
    可以?)
    A . can manage both input streams and output streams at the same time(同时输入流和输出流)
    B . performs some manipulation or process on the data(对数据执行一些操作或过程)
    C . can only manage input streams(只能管理输入流)
    D . operates on input and output devices but not files(操作用输入和输出设备而不是文件)
    E . can manage byte streams and character streams at the same time(可以同时管理字节流和字符流)
  • 问题5分析和领悟: 正确答案选B,我选了A。数据流表示一个特定的源或目标流,用于输入或输出。处理流就像一个数据流,其中一些额外的进程是添加到输入或输出中。例如,一个处理字节流可能会从一个文件中输入所有的条目,并删除任何不是数字的ASCII字符,这样输入的输入就不会抛出NumberFormatException。
  • 问题6: System.err is a(n)(System.err是一个)
    A . input stream(输入流)
    B . GUI dialog box that indicates when an error has arisen(显示错误发生时的GUI对话框)
    C . object(对象)
    D . Error subclass(错误的子类)
    E . RuntimeException subclass(RuntimeException的子类)
  • 问题6分析和领悟: 正确答案选C,我选了B,这道题可以用书本上353页的标准IO流来解释。
  • System类中有三种对象引用变量(in,out和err),分别代表了三种I/O流,这些对象引用变量都声明为公共可见性和静态属性,以便可以通过System类直接访问。

  • 问题7:The Scanner class provides an abstraction for input operations by(Scanner类为输入操作提供了一个抽象的?)
    A . using try and catch statements to catch any IOException instead of throwing the Exception elsewhere(使用try-catch语句捕捉任何的IOException,而不是将异常抛出其他地方)
    B . parsing input lines into individual tokens(将输入行分割为为单个字符)
    C . performing conversion operations from String to the appropriate type as specified in the Scanner message(在扫描消息中指把字符串转换到适当类型)
    D . inputting from the standard input stream if create is called using System.in(如果创建的调用是使用系统的,那么从标准输入流中输入)
    E . all of the above(以上所有)
  • 问题7分析和领悟: 正确答案是E,我选了A。Scanner类实现了在没有细节的情况下执行输入操作的抽象过程。这些细节包括导入java.io类,以某种方式处理IOexception,从标准输入流中输入,将输入划分为单个字符串,并根据需要将每个字符串转换成输出请求。
  • 问题8: The term "exception propagation" means(术语“异常的传递”是指?)
    A . an exception is caught by the first catch clause(一个例外被第一个catch语句捕获)
    B . an exception not caught by the first catch clause is caught by an outer (enclosing) catch clause(不被第一个catch子句捕获的异常被一个外部(封闭的)catch子句捕获)
    C . exceptions are caught, sequentially, by catch clauses in the current try block(异常是被当前try语句块中的catch子句捕获的)
    D . exceptions always are caught by the outermost try block(异常总是被最外层的try块捕获)
    E . none of the above(以上都不是)
  • 问题8分析和领悟:正确答案选E,我选了B, 异常的传递意味着一个异常需要匹配的catch子句在当前try语句块中没有,然后在下一个封闭try语句块中去寻找···直到异常已经被匹配的catch子句找到或到达main函数结束。
  • 问题9: PrintWriter is a better output stream class than PrintStream because PrintWriter(PrintWriter比起PrintSteam是一个更好的输出流类,因为PrintWriter)
    A . has both print and println methods and PrintStream only has print(有print和println方法而PrintStream只有print方法)
    B . can output both byte and character streams and PrintStream can only output byte streams(可以输出字节和字符流,而PrintStream只能输出字节流)
    C . has error checking mechanisms as part of the class and PrintStream does not(将错误检查机制作为类的一部分,而PrintStream则没有)
    D . will not throw checked exceptions and PrintStream will(不会抛出检查异常和PrintStream)
    E . all of the above(上面所有的)
  • 问题9分析和领悟: 正确答案选C,我的答案是B。PrintWriter类是一个Writer类,而PrintStream类是一个流类。主要的区别在于PrintWriter是专门为文件而设计的,因此有错误检查机制而不是PrintStream的一部分。
  • 问题10:All run-time Errors throw Exceptions.
    A . true
    B . false
  • 问题10分析和领悟:正确答案是false,我选的true,理解提议有误。Java将任何可抛出的对象都归为一个错误或一个异常,因此没有运行时错误抛出异常。运行时错误导致程序终止。异常可以被处理,以便程序继续执行(只有在正确处理异常时)。
  • 我觉得这次测验挺难的,有好多知识点都不会,这次10道改错大概花了两个小时,而且理解的还是很不到位,只能慢慢补上了

结对及互评

-20172301
-20172304

点评模板:

  • 博客中值得学习的或问题:
    • 20172301:博客中自学程度非常好,他是真的深入进去学懂了程序设计的内核,真的佩服!鼓掌鼓掌!
    • 20172304:博客内容还是有点简略,希望可以更加的详细一点。

其他(感悟、思考等,可选)

这是本学期最后一次学习课本所写的总结博客了。总觉得一本书太厚一学期太长,但就是很快的在自己指缝中间溜走了。在学习这本书的时候收获了自主性和思考性,当然还有很多疑问还藏在书本的字里行间。以后还是要多翻翻,多看看这本书才可以。

前几天看自己以前的摘抄本,看到这样一段话:

人能否有好的心态,在很大程度上取决于价值观。一个价值观正确且坚定的人,他知道人生中什么是重要的,什么是不重要的,对重要的看得准、抓得住,对不重要的看得开、放得下,大事有主见,小事能超脱,心态自然会好。

价值观于自己而言,就像是潜在的一根绳子,一头系在自己身上,一头抓在命运手里。当我们编织好自己绳子系在自己身上的时候,我们要走向何方已经冥冥中定下了。所以,在编织自己绳子的时候,还是需要足够的去了解自己,知道自己想要什么,这才是对于自己而言最重要的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 100/100 1/1 15/15
第二周 377/477 1/2 20/35
第三周 280/757 2/4 22/57
第四周 973/1730 1/5 35/92
第五周 1000/2730 1/6 40/132
第六周 729 /3459 1/7 40/172
第七周 660/4119 2/9 30/192
第八周 1417/5536 3/12 40/232
第九周 1139/6675 2/14 60/292
第十周 758/7433 2/14 40/332

参考资料

posted @ 2018-05-20 09:29  虹澄清晓  阅读(375)  评论(4编辑  收藏
页尾