20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结
教材学习内容总结
-
了解集合的同构和异构:同构集合保存类型全部相同的对象,异构集合可以保存各种类型的对象。
-
集合可以用各种方式实现,保存对象的基础数据结构可以用各种技术来实现。
-
学习动态结构,初步学习链表中的增删查改。
-
学习线性数据结构:队列(queue)先进先出,堆栈(stack)先进后出。
-
了解非线性数据结构:树(由一个根节点和构成层次结构的多个节点组成),图(连接一个图内各节点的边数一般没有限制)。
-
了解Java集合类API是由Java类库中定义的几种表示不同类型集合的类。
-
了解泛型:一个集合所管理的对象的类型要在实例化该集合对象时才确定,保证了集合中对象类型的兼容性。
教材学习中的问题和解决过程
- 问题1:集合是一种对象,对象适用于定义集合,书上说集合和抽象数据类型是可以互换的等同概念,那么为什么对象特别适用于实现抽象数据类型。
- 问题1解决方案:抽象数据类型(ADT)是一个包含数据和施加在这些数据上的操作的集合。对象实际上就是将变量和相关的方法封装在一起的实体。对象隐藏了ADT背后的实现细节,并且将借口和底层的实现相分离,使得实现发生变化后并不影响接口。
- 问题2:ArrayList是一种异构集合,那么ArrayList类提供抽象数据类型吗?
- 问题2解决方案:ArrayList类提供抽象数据类型。ArrayList类提供一个信息集合,并提供保存和访问信息的操作,而实现的细节对我们来说是隐藏的。也就是说,当时用一个ArrayList对象时,不需要知道他存放的数据是什么或着操作是如何实现的。
- 问题3:不理解链表中指针的是如何定义的,指针的使用也不是很清楚。
- 问题3解决方案:
Java语言中的对象引用实际上是一个指针(这里的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。
程序代码:
class Node
{
Object data;
Node next;//指向下一个结点
}
将数据域定义成Object类是因为Object类是广义超类,任何类对象都可以给其赋值,增加了代码的通用性。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小,当调用者想得到链表的大小时,不必遍历整个链表。
链表的数据结构我们可以用类List来实现链表结构,用变量Head、Tail、Length、Pointer来实现表头。存储当前结点的指针时有一定的技巧,Pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点,因为当删除当前结点后仍需保证剩下的结点构成链表,如果Pointer指向当前结点,则会给操作带来很大困难。如何得到当前结点呢?我们定义了一个方法cursor(),返回值是指向当前结点的指针。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作。例如reset()方法使第一个结点成为当前结点。insert(Objectd)方法在当前结点前插入一个结点,并使其成为当前结点。remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点。
代码调试中的问题和解决过程
-
问题1:一开始做对链表的增删查改的时候,由于对概念的理解不清,直接令两个对象进行比较,导致比较的结果与实际不符,也就进而导致了删除链表节点不成功。
-
问题1解决方案:在Java中,除了值类型,另外还有一种引用类型,而不同的对象,其引用值其实并不相等,即在内存中的不同的地址单元中。比如我们定义了学生类,分别有两个学生对象实例 :
Student stu= new Student(); Student stu1= new Student();
-
此时我们无论是使用stu==stu1符号,或者stu.equals(stu1)方法,把两个对象进行比较,得到的结果都是不相等的,因为对于引用类型来说,默认是比较两个对象引用的地址,显示,每个对象的引用有自己唯一的地址,所以,是不相等。把对象中所储存的内存地址中的值转化为字符串类型的在进行比较就可以了。
代码托管
上周考试错题总结
- 错题1: An exception that could also arise in the try statement that does not have an associated catch statement is
A . ClassNotFoundException
B . IllegalArgumentException
C . NegativeArraySizeException
D . NullPointException
E . OutOfMemoryException - 解析 如果数组尚未实例化,那么i3将抛出NullPointerException。 ClassNotFoundException,IllegalArgumentException和OutOfMemoryException不会被抛出,因为try语句中没有代码引用某个未知类,使用参数或处理新内存的生成。 NegativeArraySizeException仅在实例化数组时出现。
- 错因分析:在做测试的时候还未彻底的学习课本,导致概念理解不清。
- 错题2: 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 - 解析 B,C和D中的答案都是正确的,RuntimeExceptions是Throwable对象,不是Error类的一部分,两种类型的RuntimeException是ArithmeticException和NullPointerException。不是RuntimeException的异常包括各种检查的异常,但RuntimeException不是检查异常。
- 错因分析:自己粗心大意,对题一理解不清导致错误。
- 错题3: If an exception is thrown and is not caught anywhere in the program, then the program terminates.
A . true
B . false - 解析 异常是interest的事件,或者是没有异常处理程序就无法正常处理的运行时情况。异常被关联的异常处理程序捕获。如果抛出异常但未处理,则程序必须终止。
- 错因分析:对异常的概念理解混淆。
- 错题4: A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
A . true
B . false - 解析 所有的try语句都必须至少有一个catch语句,或者没有理由拥有try语句。对于可能引发的每种类型的异常,可以有一个catch语句。程序员可以指定尽可能多的catch语句。此外,try语句可能有一个finally子句,但不需要一个。
- 错因分析:对异常的捕获概念理解不清。
- 错题5: If an exception arises in a catch statement, and the exception is of the type caught by the catch statement, then the catch statement catches the same exception. For instance, if the following catch statement first catches an ArithmeticException and, while executing, throws another ArithmeticException, it is able to catch the second ArithmeticException as well the first.
catch (ArithmeticException ex) {...}
A . true
B . false - 解析 异常会导致当前语句停止执行并控制外部传送到第一个catch(在当前语句之后)可以捕获异常的传输。 因此,catch语句不会捕获从它自身内部抛出的异常,尽管catch语句可以在其中嵌套额外的try和catch语句。
- 错因分析:在学习异常的传递的时候,没弄清异常传递的真正定义是什么,再犯了这个错误后,一定要好好记住!
结对及互评
- 博客中值得学习的或问题:
- 排版精美,对于问题研究得很细致,解答也很周全。
- 代码中值得学习的或问题:
- 代码写的很规范,思路很清晰,继续加油!
点评过的同学博客和代码
其他(感悟、思考等,可选)
有一个问题一直困扰着我,那就是自己到底为什么而读书,为什么而学习,这些天正好看到一段话,现放到这里予自己以共勉。
作者:孙在在
链接:https://www.zhihu.com/question/40683692/answer/90861351
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我感到害怕。就像我们不知道冬天从哪天开始,只会感觉夜的黑越来越漫长。我害怕一跟他们谈话,我就像一个透明的人,苍白的脑袋无法隐藏。我所拥有的内涵是什么?不就是人人能脱口而出,游荡在空气中最通俗的认知吗?像心脏在身体的左边。春天之后是夏天。美国总统是世界上最有权力的人。但阅读的人在知识里遨游,能从食谱论及管理学,八卦周刊讲到社会趋势,甚至空中跃下的猫,都能让他们对建筑防震理论侃侃而谈。相较之下,我只是一台在MP3世代的录音机,过气、无法调整。我最引以为傲的论述,恐怕只是他多年前书架上某本书里的某段文字,而且,还是不被荧光笔画线注记的那一段。我害怕,当他们读书时,脸就藏匿在书后面。书一放下,就以贵族王者的形象在我面前闪耀。举手投足都是自在风采。让我明了,那不只是知识,更是魔力。他们是懂美学的牛顿。懂人类学的梵谷。懂孙子兵法的甘地。血液里充满答案,越来越少的问题能让他们恐惧。彷佛站在巨人的肩牓上,习惯俯视一切。那自信从容,是这世上最好看的一张脸。我害怕,我祈祷他们永远不知道我的不安,免得他们会更轻易击垮我,甚至连打败我的意愿都没有。我如此害怕,因为他们的榜样是伟人,就算做不到,退一步也还是一个,我远不及的成功者。我害怕,他们知道「无知」在小孩身上才可爱,而我已经是一个成年的人。我害怕,因为大家都喜欢有智慧人。我害怕,他们能避免我要经历的失败。我害怕,他们懂得生命太短,人总是聪明得太迟。我害怕,他们的一小时,就是我的一生。我害怕,尤其是,还在努力的人。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 126 | 1/1 | 20/20 | |
第二周 | 388/466 | 1/2 | 15/35 | |
第三周 | 706/1162 | 1/3 | 17/52 | |
第四周 | 1104/2266 | 1/4 | 20/72 | |
第五周 | 1126/3392 | 1/5 | 15/87 | |
第六周 | 906/4298 | 1/6 | 20/107 | |
第七周 | 1233/5531 | 1/7 | 20/127 | |
第八周 | 1091/6622 | 1/8 | 24/151 | |
第九周 | 320/7042 | 1/9 | 20/171 | |
第十周 | 335/7377 | 1/10 | 20/191 |
-
计划学习时间:20小时
-
实际学习时间:20小时
-
改进情况:
到这一周为止,教材上的学习内容就全部结束了,回头看这一本书,也仅仅是学了一遍而已,里面还是存在着不熟悉以及没有灵活掌握的内容,尤其是最后的这几章,都存在着一定的难度。以后还会多加复习,虽然教材结束了,但Java的学习才刚刚开始而已,从下周开始,王老师就要开始教新一部分的知识和内容了,希望我能够应对好以后的问题和挑战吧,也希望自己以后还能够继续不断进步。