20172301 2017-2018-2 《程序设计与数据结构》第十周学习总结

20172301 2017-2018-2 《程序设计与数据结构》第十周学习总结

教材学习内容总结

  • 集合:是一个对象。
  • 同构和异构:取决于集合保存的是不是类型所有都相同的对象。
    ArrayList因为其多态性,因此能够存储任何类型的对象,是异构
  • 线性数据结构:
    • 队列: <span style="color:red">先进先出</span>
    • 堆栈: <span style="color:red">后进先出</span>
  • 非线性数据结构:
    • 树:由一个根节点和构成层次结构的多个节点组成。
      • 内部节点:除根节点外的全部节点
      • 叶节点:没有子节点的节点(就是在周围两边的节点)
      • 树的结构从上到下,根节点在顶层,叶节点在底层
      • 二叉树:每一个节点有不超过两个的子节点。(有两个枝丫)
    • 图:使用常见的边来链接节点。

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

  • 问题1:persistence (持续化)和 serialization(序列化)区别。这是针对这周错题里的,单独分析一下。html

  • 问题1解决方案:java

    • 首先,在查阅了一些资料以后,我对这个问题有必定的理解,可是不是很懂。详细请看错题理解。跳转
    • 而后,我在蓝墨云上请教了王老师,王老师给我了一个连接。<table><tr><td bgcolor=#7FFFD4>参考资料:序列化和持久化的区别与联系 </td></tr></table>

    <span style="color:rgb(51,51,51);">序列化和持久化很类似,有些人甚至混为一谈,其实仍是有区别的,</span><span style="color:#ff0000;">序列化是为了解决对象的传输问题,传输能够在<a href="http://baike.baidu.com/view/1053.htm" style="text-decoration:none;">线程</a>之间、进程之间、内存外存之间、<a href="http://baike.baidu.com/view/23880.htm" style="text-decoration:none;">主机</a>之间进行。</span><span style="color:#333333;">我之因此在这里提到序列化,是由于咱们能够利用</span><span style="color:#ff0000;">序列化来辅助持久化</span><span style="color:#333333;">,能够说凡是能够持久化的对象均可以序列化,由于序列化相对容易一些(也不是很容易),因此主流的软件基础设施,好比.net和java,已经把序列化的框架完成了。</span>git

    因此,序列化只是辅助持久化而已,是有必定区别的,换句话说,实现持久化就能够实现序列化。数据库

  • 问题2:list下ArrayList和Linked和Vector的区别编程

  • 问题2的解决方案:在list下这几个有什么区别。ArrayList咱们都熟悉,是以数组的形式来实现的。数组

    • Vector、ArrayList都是以相似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。
    • List中的元素有序容许有重复的元素,Set中的元素无序不容许有重复元素。
    • Vector线程同步,ArrayList、LinkedList线程不一样步
    • LinkedList适合指定位置插入、删除操做,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操做。
    • ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,所以ArrayList更节省空间。

<table><tr><td bgcolor=#7FFFD4>参考资料:[Vector,ArrayList, LinkedList的区别](https://www.cnblogs.com/zkk-wust/p/7250776.html) </td></tr></table> 网络

  • 问题3:**Java集合不能存放基本数据类型,只存放对象的引用。**那么,为何ArrayList能够存放int类型的数据?
    数据结构

  • 问题3解决方案:框架

能够经过包装类把基本类型转为对象类型,存放引用就能够解决这个问题。更方便的,因为有了自动拆箱和装箱功能,基本数据类型和其对应对象(包装类)之间的转换变得很方便,想把基本数据类型存入集合中,直接存就能够了,系统会自动将其装箱成封装类,而后加入到集合当中。ide

也就是说,集合类能够存放基本类型的包装类。那么,由于系统能够自动的装箱和拆箱,咱们就能够不用考虑添加的元素是不是基本数据类型了。

<table><tr><td bgcolor=#7FFFD4>参考资料: [Java集合不能存放基本数据类型,只存放对象的引用](https://blog.csdn.net/zm13007310400/article/details/71256507)</td></tr></table>

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

  • 问题1:在作PP13.3的时候,我想逐个比较列表中的数。结果

  • 问题1解决方案:经过两次结果的对比,我发现了,这个循环做用是,**前一个和后一个相比较,并非第一个依次与后几个比较。**这是和题意相悖的。而后,我总结我须要运用两个循环,因此我定义了两个指针。让他们分别去循环。

代码托管

上周考试错题总结

  • An exception can produce a "call stack trace" which lists B
    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

  • 理解:首先,咱们要清楚call stack trace是什么意思,在书P344,堆栈踪影。咱们可能不是很熟悉,可是咱们应该清楚什么是堆栈。而堆栈是一种以 <span style="color:red">后进先出</span>方式管理数据的线性数据结构。 堆栈跟踪提供了储存在运行时堆栈中的发生异常方法、文件和代码行号。若是是,先进后出,那么就是反序输出的。

  • The idea that an object can exist separate from the executing program that creates it is called C
    A . transience
    B . static
    C . persistence
    D . serialization
    E . finality

  • 理解:其实我以为这道题是超纲了。先不说咱们不清楚选项的意思。这里我惟一看懂的就一个B静态的。 <span id="jump"> </span>

    • 那么,咱们来看下解析:

    对象存储在内存中,当它们再也不被引用时,被垃圾回收器回收。当Java程序终止时,没有对象被引用,所以全部对象都被回收。可是,能够保存任何给定的对象以供未来使用。这种特性称为持久性,经过将对象的实例数据保存到文件中来实现这一点。这能够经过将每一个实例数据写入数据文件来实现,可是使用对象序列化简化。

    • 垃圾回收的什么咱们都懂,问题是persistence(持久化)是什么。

    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

    • 其实,就是把对象存入文件或者数据库中,跟IO流有关系?
      同时,我也查了一下其余的选项。E应该是常量化,A不知道,主要是D序列化。咱们再看一下序列化的定义:

    序列化是将对象状态转换为可保持或传输的格式的过程在MFC中储存或恢复对象的过程即为Serialization,也称为Persistent(永续生存)。在序列化期间,对象将其当前状态写入到临时或永久性存储区(存入文件中)。之后,能够经过从存储区中读取或反序列化对象的状态,从新建立该对象。以此达到面向对象中的永续生存。

    不看不知道,一看吓一跳。序列化也称为Persistent(永续生存)。难不成他们还有渊源?为何不选D而选C呢?

    • 因此,我查到了java中的Serialiazation机制
      Serialization是指把类或者基本的数据类型持久化(persistence)到数据流(Stream)中,包括文件、字节流、网络数据流。
      JAVA中主要靠两个类:ObjectOuputStream和ObjectInputStream。 他们是JAVA IO系统里的OutputStream和InputStream的子类。

    • 咱们接着查下API加以理解接口Serializable

    • 其实,我仍是不理解,或者说,使用serialization也必须持久化,因此才选的C,不明白别的同窗怎么想的吧,对我来讲有点难度。

    <table><tr><td bgcolor=#7FFFD4>参考资料:

Persistence VS Serialization serialization
持久化
什么是java persistence </td></tr></table>

  • Character streams manage C
    A . byte-sized data
    B . binary data
    C . Unicode characters
    D . ASCII characters
    E . compressed data

  • 理解:字符流用于16位Unicode字符。这与用于管理任何字节大小数据的字节流不一样,包括ASCII字符和其余类型的二进制数据。

  • System.err is a(n) C
    A . input stream
    B . GUI dialog box that indicates when an error has arisen
    C . object
    D . Error subclass
    E . RuntimeException subclass

  • 理解:这题确实是鲁莽了。在书P352:

    System类中有三种对象引用变量(in, out, err),分别表明了三种标准I/O流。

    <span style="color:red">因此,System.err应该是一个对象,表明的是错误流。</span>

  • Assume infile is a BufferedReader for a textfile and that the textfile is empty. What is returned from the message infile.readLine( ); ? B
    A . 0
    B . null
    C . a special character known as the End-of-file marker (EOF)
    D . none of the above, the message causes a NullPointerException to be thrown
    E . none of the above, the message causes a EndOfFileException to be thrown

  • 理解:这道题,我选了D。那为何不会抛出异常呢。咱们须要了解空指针异常有哪些。

<table><tr><td bgcolor=#7FFFD4>参考资料:[通常报java.lang.NullPointerException的缘由有如下几种](https://blog.csdn.net/zwhfyy/article/details/885588/) </td></tr></table> >- 字符串变量未初始化; >- 接口类型的对象没有用具体的类初始化; >- 当一个对象的值为空时,你没有判断为空的状况。

恍然大悟。
  • While the Exception class is part of java.lang, IOException is part of java.io. A
    A . true
    B . false
  • 理解:如图。

结对及互评

  • 博客互评状况
    • 20172328
    • 李馨雨同窗的博客每次感悟都很深入。有能力,可是错过了追求有价值的东西,心态会崩;没能力,可是强行追求,最终达不到目的,心态会崩。也就是,价值观须要理性。对于她未解决的代码问题,我认为空指针异常应该是她指针指向的是不存在的,也就是说她指针指向有问题。但愿她能够经过调试和分析代码,分析在哪一步骤指向的为空,找到问题所在。
    • 20172304
    • 段志轩同窗的博客内容有点少,可是对于问题都有本身的理解。像教材内容问题中,指针的问题,他也问过老师,就是应该写的详细一点,也方便别的同窗阅读。

其余

编程方面一切如常,可是测试方面却有了大幅度的下滑。其实,我感受测试难度并不小。而我每次都是掐着时间,30道题大约40分钟。因此,此次正确率就比较低了。其实,我感受,并非我没有努力,只是个人进步没有其余人大吧。我也注意到此次测试有满分的,一样也有30分钟之内作完题目的。因此,我以为应该仔细查找一下本身的失误在哪里,毕竟你们学的都是一本教材。另外一方面,因为四则运算项目的缘由,我并无详细的预习11章,这是应该避免的。调整好本身的状态,要能承担的起生活的压力。不论是学习,仍是其余。但愿本身可以调整好心态,迎接以后的挑战。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 122/122 1/1 20/20
第二周 487/609 1/2 18/38
第三周 482/1091 1/3 22/60
第四周 1357/2448 1/4 20/80
第五周 628/3106 1/5 20/100
第六周 566/3672 2/7 20/120
第七周 934/4606 1/8 25/145
第八周 2407/7013 1/9 30/175
第九周 1504/8517 1/10 20/195
第十周 981/9498 1/11 18/213

参考资料

相关文章
相关标签/搜索